找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 23658|回复: 5

[文件操作] 批处理如何求文本行最大的字节数?

[复制链接]
发表于 2012-10-5 12:11:47 | 显示全部楼层 |阅读模式
文本a.txt内有很多行字符,字符也有单字节、双字节的。


a.txt内容
-----------------
电A123
B-2235

产品R3398
-------------------
怎样用批处理 计算行的最大字节数 并显示最大字节数
谢谢
发表于 2012-10-5 16:23:08 | 显示全部楼层
本帖最后由 CrLf 于 2012-10-5 16:27 编辑

切换代码页(比如 chcp 437)后用二分回溯法取长度,或写入文件后判断文件字节数,再或者用 sort /rec 二分法判断最长行字数后用 findstr 取得
发表于 2012-10-5 22:48:39 | 显示全部楼层
判断文件大小的方案:
  1. @echo off
  2. for /f "delims=" %%a in (a.txt) do (
  3.         set "str=%%a"
  4.         setlocal enabledelayedexpansion
  5.         echo !str!>tmp
  6.         for %%z in (tmp) do set z=%%~zz
  7.         for /f "tokens=1,2" %%b in ("!z! !max!") do (
  8.                 endlocal
  9.                 if %%b gtr %%c (
  10.                         set max=%%b
  11.                         set "long=%%a"
  12.                 )
  13.         )
  14. )
  15. set /a max-=2
  16. echo !max!
  17. echo !long!
  18. pause
复制代码
发表于 2012-10-5 23:17:13 | 显示全部楼层
本帖最后由 apang 于 2012-10-6 22:15 编辑

vbs正则应该也可以吧
  1. Set FSO = CreateObject("Scripting.FileSystemObject")
  2. Set File = FSO.OpenTextFile("a.txt",1)
  3. Max = 0
  4. Do Until File.AtEndOfStream
  5.    strLine = File.ReadLine
  6.    Set Re = New RegExp
  7.    Re.Pattern="[^\x00-\xff]"
  8.    Re.Global=true
  9.    strRe = Re.Replace(strLine,"aa")
  10.    If Len(strRe) > Max Then Max = Len(strRe)
  11. Loop
  12. MsgBox "最大字节数:" & Max
复制代码
发表于 2012-10-5 23:55:18 | 显示全部楼层
差点忘了还有 findstr /o,几乎没有使用过...
如果不需要考虑兼容特殊字符 ! 的话还是比较容易实现的:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1* delims=:" %%a in ('cmd /c "type a.txt&echo.&echo."^|findstr /o .*') do (
  3.         set /a len=%%a-offset-2
  4.         if !len! gtr !max! (
  5.                 set "max=!len!"
  6.                 set "long=!last!"
  7.         )
  8.         set last=%%b
  9.         set offset=%%a
  10. )
  11. echo %max%
  12. echo %long%
  13. pause
复制代码
当然还是没有文件大小来得方便,下面是不考虑 ! 的文件大小方案:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in (a.txt) do (
  3.         echo;%%a>tmp
  4.         for %%z in (tmp) do (
  5.                 if %%~zz gtr !max! (
  6.                         set max=%%~zz
  7.                         set "long=%%a"
  8.                 )
  9.         )
  10. )
  11. set /a max-=2
  12. echo !max!
  13. echo !long!
  14. pause
复制代码
 楼主| 发表于 2012-10-24 14:10:48 | 显示全部楼层
findstr /o 最好用

谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 19:42 , Processed in 0.018005 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表