标题: 【出题】批处理取文本中的第117列(限新手) [打印本页]
作者: more 时间: 2009-3-13 22:12 标题: 【出题】批处理取文本中的第117列(限新手)
只限新手
在联盟中发现一个老帖子,其内容大概为:按照第117列的内容的前三个字符生成文件
现在就这个问题出个小题目:即读出文本中第117列的内容,可以用以下代码生成测试文本:
- @echo off
- setlocal enabledelayedexpansion
- (
- for /l %%a in (1 1 2000) do (
- call set "var!m!=%%var!m!%%%%a "
- set /a n+=1
- if "!n!"=="120" (
- call echo.%%var!m!%%
- set /a m+=1,n=0
- )
- )
- )>test.txt
复制代码
读取的结果如下:
- 117
- 237
- 357
- 477
- 597
- 717
- 837
- 957
- 1077
- 1197
- 1317
- 1437
- 1557
- 1677
- 1797
- 1917
- 请按任意键继续. . .
复制代码
作者: tireless 时间: 2009-3-14 00:08
- @echo off>nul 3>117.txt
- for /f "tokens=31,*" %%a in (test.txt) do ^
- for /f "tokens=31,*" %%c in ("%%b") do ^
- for /f "tokens=31,*" %%e in ("%%d") do ^
- 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://www.bathome.net/) |
Powered by Discuz! 7.2 |