Board logo

标题: 【出题】批处理取文本中的第117列(限新手) [打印本页]

作者: more    时间: 2009-3-13 22:12     标题: 【出题】批处理取文本中的第117列(限新手)

只限新手
在联盟中发现一个老帖子,其内容大概为:按照第117列的内容的前三个字符生成文件
现在就这个问题出个小题目:即读出文本中第117列的内容,可以用以下代码生成测试文本:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (
  4. for /l %%a in (1 1 2000) do (
  5.   call set "var!m!=%%var!m!%%%%a "
  6.   set /a n+=1
  7.   if "!n!"=="120" (
  8.     call echo.%%var!m!%%
  9.     set /a m+=1,n=0
  10.   )
  11. )
  12. )>test.txt
复制代码

读取的结果如下:
  1. 117
  2. 237
  3. 357
  4. 477
  5. 597
  6. 717
  7. 837
  8. 957
  9. 1077
  10. 1197
  11. 1317
  12. 1437
  13. 1557
  14. 1677
  15. 1797
  16. 1917
  17. 请按任意键继续. . .
复制代码

作者: tireless    时间: 2009-3-14 00:08

  1. @echo off>nul 3>117.txt
  2. for /f "tokens=31,*" %%a in (test.txt) do ^
  3. for /f "tokens=31,*" %%c in ("%%b") do ^
  4. for /f "tokens=31,*" %%e in ("%%d") do ^
  5. for /f "tokens=24" %%i in ("%%f") do echo %%i
复制代码


[ 本帖最后由 tireless 于 2009-3-14 00:10 编辑 ]
作者: batman    时间: 2009-3-21 15:25

不知楼上为什么总要把代码写得标新立意。。。
作者: tireless    时间: 2009-3-21 17:27     标题: 回复 3楼 的帖子

总?是指哪些?

句尾的转义符号“^”我好像只写过这一次;
开头的句柄转换其实我也不太懂,批处理结尾没有把句柄转换回来,确实不太好,好吧,以后不这么写;
我有时会利用“除数不能为0”来判断n的值...其实我很在乎代码的效率...set /a n+=1,1/(10-n) 2>nul || pause 好像是比 set /a n+=1&if !n!==10 pause 的效率低一点点...

[ 本帖最后由 tireless 于 2009-3-21 20:10 编辑 ]
作者: Batcher    时间: 2009-3-21 17:33     标题: 回复 4楼 的帖子

句柄重定向的方法在频繁写文件的场合挺适用的,请坚持之。
作者: tireless    时间: 2009-3-21 17:40     标题: 回复 5楼 的帖子

知道。“用括号括起来统一输出”代替也是可以的吧
作者: Batcher    时间: 2009-3-21 17:41     标题: 回复 6楼 的帖子

是的。
我个人更倾向于括号^_^
作者: 随风    时间: 2009-3-21 18:02

呵呵,tireless可能误会batman版主了,当然版主的言语也确有不当。
我分析一下
banman兄是一位批处理“老鸟”对代码的要求自然比新手要高些,
比如代码的可读性,效率。。等等。。
所以若非需要一般都不主张使用一些比较晦涩的写法。
而tireless兄的代码,估计也是在试用这些比较“另类”的方法,
以banman兄的恒量标准来看,该代码则采用了一些大可不必的语法,所以说了句不太恰当的话。
误会、误会。。

不过也要说一句batman版主,作为管理人员,说话应时时注意自己“身份”不要仅凭自己一时意气发言。
作者: zjw767676    时间: 2009-3-21 18:19

tokens>31就不行
还是第一次知道
作者: wxcute    时间: 2009-3-21 19:05

我倒是认为用 ^ 这个符号还是挺不错的。首先结构没有打乱,一看就知道是一行代码;再者直接写成一行会被浏览器断句,一条一条的且省了几个括号。




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2