[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 如何判断一个超大文本的最后一行是否为空行

比如a.txt文件很大,假设有几万行,如何比较快速的判断最后一行是否是空行?

[ 本帖最后由 随风 于 2009-8-25 17:07 编辑 ]
技术问题请到论坛发帖求助!

  1. @echo off
  2. for /f %%a in ('^(type a.txt^&echo.^)^|find /c /v ""') do (
  3.     for /f %%b in ('find /c /v "" ^< a.txt') do (
  4.         if "%%a"=="%%b" (echo 不是空行) else echo 空行
  5.     )
  6. )
  7. pause
复制代码
用临时文件速度快一点:
  1. ((type a.txt&echo.)|find /c /v "" & find /c /v ""<a.txt)>.temp
  2. set /p line=<.temp
  3. for /f "skip=1" %%a in (.temp) do (
  4.     if "%%a"=="%line%" (echo 不是空行) else echo 空行
  5. )
  6. del .temp
  7. pause
复制代码

TOP

tireless兄 出手真快
  1. @echo off
  2. for /f %%a in ('find/c /v "" ^< a.txt') do (
  3.    for /f %%b in ('"(type a.txt&set/p= <nul)|find/c /v """') do (
  4.    if "%%a" neq "%%b" (echo 最后行是空行)else echo 最后行不是空行
  5. ))
  6. pause
复制代码

TOP

呵呵,对于上万行文本,速度仍是不敢恭维,继续。。。。。
技术问题请到论坛发帖求助!

TOP

  1. @echo off
  2. more a.txt>b.txt
  3. fc /l a.txt b.txt >nul && echo 是空行。
  4. for %%a in (a.txt) do for %%i in (b.txt) do if %%~za==%%~zi echo 是空行
  5. rem 可能for速度快点。
复制代码
命令行参考:hh.exe ntcmds.chm::/ntcmds.htm
求助者请拿出诚心,别人才愿意奉献热心!
把查看手册形成条件反射!

TOP

这样笨点可以不
  1. @echo off
  2. findstr /n .* y1.txt>b1.txt
  3. (type y1.txt&set/p= <nul)>b2.txt
  4. findstr /n .* b2.txt>b3.txt
  5. for %%a in (b3.txt) do for %%b in (b1.txt) do set /a n=%%~za-%%~zb
  6. if %n% gtr 1 (echo 空行)else echo 不是空行
  7. del b1.txt b2.txt b3.txt
  8. pause
复制代码

TOP

  1. @echo off
  2. copy /b a.txt a.tmp>nul
  3. echo a>>a.tmp
  4. for /f %%a in ('find /c /v "" ^<a.txt') do ^
  5. for /f %%b in ('find /c /v "" ^<a.tmp') do ^
  6. if %%a==%%b (echo 非空行) else echo 空行
  7. del a.tmp
  8. pause
复制代码

TOP

more 处理6万行以上的文本好像会卡住,需要按空格继续。
find /c /v "" 处理太多的行速度其实也并不快。
继续。。。继续。。。
技术问题请到论坛发帖求助!

TOP

由空格、tab等空白字符组成的行算不算空行?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

SORT 好用不?
  1. @echo off
  2. sort a.txt>b.txt
  3. for %%a in (a.txt) do for %%b in (b.txt) do if %%~za equ %%~zb (echo 空行)else echo 不是空行
  4. pause
复制代码

TOP

回复 9楼 的帖子

不算,

处理2百17万行文本46M,2秒。



[ 本帖最后由 随风 于 2009-8-26 03:01 编辑 ]
技术问题请到论坛发帖求助!

TOP

  1. @echo off
  2. findstr /v $ test.txt>nul || echo 空行
  3. pause
复制代码

[ 本帖最后由 pusofalse 于 2009-8-26 04:52 编辑 ]
4

评分人数

心绪平和,眼藏静谧。

TOP

回复 12楼 的帖子

看代码的意思回车是不是也算行尾?
Still with wax

TOP

回复 13楼 的帖子

这是findstr的一个很实用的技巧。例如如果要计算某文本的行数可以用:
  1. findstr /n /v $ test.txt
复制代码

但这并不适用于最后一行是空行的文本,如何判断最后一行是否为空行,思路就是这样来的。我想随风兄的代码应该也是类似于这句的吧?
心绪平和,眼藏静谧。

TOP

回复 14楼 的帖子

呵呵,不是类似,是一模一样。。。
又一次证明了findstr如果匹配的结果很少时,速度是很快的。
技术问题请到论坛发帖求助!

TOP

返回列表