标题: [文本处理] 如何判断一个超大文本的最后一行是否为空行 [打印本页]
作者: 随风 时间: 2009-8-25 16:57 标题: 如何判断一个超大文本的最后一行是否为空行
比如a.txt文件很大,假设有几万行,如何比较快速的判断最后一行是否是空行?
[ 本帖最后由 随风 于 2009-8-25 17:07 编辑 ]
作者: tireless 时间: 2009-8-25 18:16
- @echo off
- for /f %%a in ('^(type a.txt^&echo.^)^|find /c /v ""') do (
- for /f %%b in ('find /c /v "" ^< a.txt') do (
- if "%%a"=="%%b" (echo 不是空行) else echo 空行
- )
- )
- pause
复制代码
用临时文件速度快一点:- ((type a.txt&echo.)|find /c /v "" & find /c /v ""<a.txt)>.temp
- set /p line=<.temp
- for /f "skip=1" %%a in (.temp) do (
- if "%%a"=="%line%" (echo 不是空行) else echo 空行
- )
- del .temp
- pause
复制代码
作者: terse 时间: 2009-8-25 19:31
tireless兄 出手真快- @echo off
- for /f %%a in ('find/c /v "" ^< a.txt') do (
- for /f %%b in ('"(type a.txt&set/p= <nul)|find/c /v """') do (
- if "%%a" neq "%%b" (echo 最后行是空行)else echo 最后行不是空行
- ))
- pause
复制代码
作者: 随风 时间: 2009-8-25 19:46
呵呵,对于上万行文本,速度仍是不敢恭维,继续。。。。。
作者: zqz0012005 时间: 2009-8-25 19:58
- @echo off
- more a.txt>b.txt
- fc /l a.txt b.txt >nul && echo 是空行。
- for %%a in (a.txt) do for %%i in (b.txt) do if %%~za==%%~zi echo 是空行
- rem 可能for速度快点。
复制代码
作者: terse 时间: 2009-8-25 20:55
这样笨点可以不- @echo off
- findstr /n .* y1.txt>b1.txt
- (type y1.txt&set/p= <nul)>b2.txt
- findstr /n .* b2.txt>b3.txt
- for %%a in (b3.txt) do for %%b in (b1.txt) do set /a n=%%~za-%%~zb
- if %n% gtr 1 (echo 空行)else echo 不是空行
- del b1.txt b2.txt b3.txt
- pause
复制代码
作者: rat 时间: 2009-8-25 21:41
- @echo off
- copy /b a.txt a.tmp>nul
- echo a>>a.tmp
- for /f %%a in ('find /c /v "" ^<a.txt') do ^
- for /f %%b in ('find /c /v "" ^<a.tmp') do ^
- if %%a==%%b (echo 非空行) else echo 空行
- del a.tmp
- pause
复制代码
作者: 随风 时间: 2009-8-25 22:47
more 处理6万行以上的文本好像会卡住,需要按空格继续。
find /c /v "" 处理太多的行速度其实也并不快。
继续。。。继续。。。
作者: Batcher 时间: 2009-8-25 23:10
由空格、tab等空白字符组成的行算不算空行?
作者: terse 时间: 2009-8-26 00:11
SORT 好用不?- @echo off
- sort a.txt>b.txt
- for %%a in (a.txt) do for %%b in (b.txt) do if %%~za equ %%~zb (echo 空行)else echo 不是空行
- pause
复制代码
作者: 随风 时间: 2009-8-26 00:28 标题: 回复 9楼 的帖子
不算,
处理2百17万行文本46M,2秒。
。
[ 本帖最后由 随风 于 2009-8-26 03:01 编辑 ]
作者: pusofalse 时间: 2009-8-26 04:50
- @echo off
- findstr /v $ test.txt>nul || echo 空行
- pause
复制代码
[ 本帖最后由 pusofalse 于 2009-8-26 04:52 编辑 ]
作者: Lumiere 时间: 2009-8-26 12:18 标题: 回复 12楼 的帖子
看代码的意思回车是不是也算行尾?
作者: pusofalse 时间: 2009-8-26 18:27 标题: 回复 13楼 的帖子
这是findstr的一个很实用的技巧。例如如果要计算某文本的行数可以用:复制代码
但这并不适用于最后一行是空行的文本,如何判断最后一行是否为空行,思路就是这样来的。我想随风兄的代码应该也是类似于这句的吧?
作者: 随风 时间: 2009-8-27 20:38 标题: 回复 14楼 的帖子
呵呵,不是类似,是一模一样。。。
又一次证明了findstr如果匹配的结果很少时,速度是很快的。
作者: Lumiere 时间: 2009-8-28 12:45 标题: 回复 14楼 的帖子
没太理解这$行尾是什么意思。是不是只有文本最后一行才能匹配$?
[ 本帖最后由 Lumiere 于 2009-8-28 12:48 编辑 ]
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |