标题: [文件操作] 批处理如何求文本行最大的字节数? [打印本页]
作者: 光能 时间: 2012-10-5 12:11 标题: 批处理如何求文本行最大的字节数?
文本a.txt内有很多行字符,字符也有单字节、双字节的。
a.txt内容
-----------------
电A123
B-2235
产品R3398
-------------------
怎样用批处理 计算行的最大字节数 并显示最大字节数
谢谢
作者: CrLf 时间: 2012-10-5 16:23
本帖最后由 CrLf 于 2012-10-5 16:27 编辑
切换代码页(比如 chcp 437)后用二分回溯法取长度,或写入文件后判断文件字节数,再或者用 sort /rec 二分法判断最长行字数后用 findstr 取得
作者: CrLf 时间: 2012-10-5 22:48
判断文件大小的方案:- @echo off
- for /f "delims=" %%a in (a.txt) do (
- set "str=%%a"
- setlocal enabledelayedexpansion
- echo !str!>tmp
- for %%z in (tmp) do set z=%%~zz
- for /f "tokens=1,2" %%b in ("!z! !max!") do (
- endlocal
- if %%b gtr %%c (
- set max=%%b
- set "long=%%a"
- )
- )
- )
- set /a max-=2
- echo !max!
- echo !long!
- pause
复制代码
作者: apang 时间: 2012-10-5 23:17
本帖最后由 apang 于 2012-10-6 22:15 编辑
vbs正则应该也可以吧- Set FSO = CreateObject("Scripting.FileSystemObject")
- Set File = FSO.OpenTextFile("a.txt",1)
- Max = 0
- Do Until File.AtEndOfStream
- strLine = File.ReadLine
- Set Re = New RegExp
- Re.Pattern="[^\x00-\xff]"
- Re.Global=true
- strRe = Re.Replace(strLine,"aa")
- If Len(strRe) > Max Then Max = Len(strRe)
- Loop
- MsgBox "最大字节数:" & Max
复制代码
作者: CrLf 时间: 2012-10-5 23:55
差点忘了还有 findstr /o,几乎没有使用过...
如果不需要考虑兼容特殊字符 ! 的话还是比较容易实现的:- @echo off&setlocal enabledelayedexpansion
- for /f "tokens=1* delims=:" %%a in ('cmd /c "type a.txt&echo.&echo."^|findstr /o .*') do (
- set /a len=%%a-offset-2
- if !len! gtr !max! (
- set "max=!len!"
- set "long=!last!"
- )
- set last=%%b
- set offset=%%a
- )
- echo %max%
- echo %long%
- pause
复制代码
当然还是没有文件大小来得方便,下面是不考虑 ! 的文件大小方案:- @echo off&setlocal enabledelayedexpansion
- for /f "delims=" %%a in (a.txt) do (
- echo;%%a>tmp
- for %%z in (tmp) do (
- if %%~zz gtr !max! (
- set max=%%~zz
- set "long=%%a"
- )
- )
- )
- set /a max-=2
- echo !max!
- echo !long!
- pause
复制代码
作者: 光能 时间: 2012-10-24 14:10
findstr /o 最好用
谢谢
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |