标题: [文本处理] 如何最有效率取得 倒数第2行 的资料? [打印本页]
作者: strong12345 时间: 2010-2-10 13:14 标题: 如何最有效率取得 倒数第2行 的资料?
一般取资料可以用 for /f "skip=xx"
但是这种方法只能用于 由上往下,并且必须已知文件一共有几行才行
如果文件行数为变数,我尝试了几种办法,但都觉得不好,请问有没有打未大大另有高见,请指教一下,谢谢
我的方法∶
1. 先测量此文件有几行(利用 for /f 加上 计数),在算出要skip的行数,但这方法却一直行不通,会取错行....???
2. 把整个文件倒叙输出成另一文件,再去读取该文件作操作,但是这样如果文件很长,非常耗时
请问有没有别的方法??
作者: inittab 时间: 2010-2-10 13:44
可以这样做:
先在文件最后加一行标识符。如
ehco.!##$!@#>>a.txt
用find 找出!##$!@#在第几行,
find /N "!##$!@#" a.txt
得到行数后,就简单了。
作者: terse 时间: 2010-2-10 14:37
- @echo off
- for /f %%i in ('find/c /v "" ^< a.txt') do set/a "sn=%%i-2"
- for /f "skip=%sn% tokens=1* delims=:" %%i in ('findstr /n ".*" "a.txt"') do echo %%j&pause&goto :eof
复制代码
作者: 523066680 时间: 2010-2-10 14:48
1. 先测量此文件有几行(利用 for /f 加上 计数),在算出要skip的行数,但这方法却一直行不通,会取错行....???
可能是中间有空行被刷掉了吧。
作者: sysplay 时间: 2010-2-10 14:54
- @echo off
- for /f %%i in ('find/c /v "" ^< a.txt') do set/a "sn=%%i-2"
- for /f "tokens=*" %%i in ('more +%sn% a.txt') do echo %%i&&pause&& goto :eof
复制代码
作者: Seter 时间: 2010-2-10 15:16
要是我就用第三方了...我自己写的CFile也不是吃干饭的吖...CFile -2 t.txt就可以了...
作者: namejm 时间: 2010-2-10 17:33
思路:用findstr /n 获取文本总行数n,最后,for中 ship=n-2 提取到第一条数据后立即跳出for即可。
作者: batman 时间: 2010-2-10 19:39
用变量赋值法:- @echo off
- for /f "tokens=1* delims=:" %%a in ('findstr /n .* a.txt') do set "n=%%a"&set "_%%a=%%b"
- set /a n-=1
- call,echo %%_%n%%%&pause>nul
复制代码
作者: zhouyongjun 时间: 2010-2-12 20:35
- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%i in (a.txt) do (
- set "var=!str!"
- set "str=%%i"
- )
- echo;%var%
- pause>nul
复制代码
作者: qingyuedufeng 时间: 2010-2-13 15:56
刚才发错了。。。正在思考。。
[ 本帖最后由 qingyuedufeng 于 2010-2-13 15:59 编辑 ]
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |