Board logo

标题: [文本处理] 如何最有效率取得 倒数第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

  1. @echo off
  2. for /f %%i in ('find/c /v "" ^< a.txt') do set/a "sn=%%i-2"
  3. 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

  1. @echo off
  2. for /f %%i in ('find/c /v "" ^< a.txt') do set/a "sn=%%i-2"
  3. 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

用变量赋值法:
  1. @echo off
  2. for /f "tokens=1* delims=:" %%a in ('findstr /n .* a.txt') do set "n=%%a"&set "_%%a=%%b"
  3. set /a n-=1
  4. call,echo %%_%n%%%&pause>nul
复制代码

作者: zhouyongjun    时间: 2010-2-12 20:35

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in (a.txt) do (
  3. set "var=!str!"
  4. set "str=%%i"
  5. )
  6. echo;%var%
  7. pause>nul
复制代码

作者: qingyuedufeng    时间: 2010-2-13 15:56

刚才发错了。。。正在思考。。

[ 本帖最后由 qingyuedufeng 于 2010-2-13 15:59 编辑 ]




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