标题: [已结][求助]如何判断文本文件为定长格式?
[打印本页]
作者: yilliam
时间: 2008-4-19 23:09
标题: [已结][求助]如何判断文本文件为定长格式?
求助问题:
判断指定文本文件内容的格式是否为定长,如每行是否为80字符。
请问在CMD环境下可否实现?现实问题,急需解决,请指教。
———批处理初学者
在PC环境下Windows文件系统本身没有提供文件记录最大长度的参数吧?
[
Last edited by yilliam on 2008-5-4 at 10:37 AM ]
作者: bat-zw
时间: 2008-4-19 23:23
标题: 没测试:
如a.txt
@echo off
for /f "delims=" %%i in (a.txt) do set /a m+=1&set n=0&set str=%%i&call :lp %%str%%
pause>nul&goto :eof
:lp
set /a n+=1
set str=%str:~1%
if not "%str%"=="" goto lp
echo 第%m%行为%n%个字符
[
Last edited by zw19750516 on 2008-4-19 at 11:28 PM ]
作者: slore
时间: 2008-4-19 23:24
VBS可以实现……CMD下似乎也可以,不知道特殊字符处理上问题大不大……
作者: bat-zw
时间: 2008-4-19 23:35
标题: 再修改下:
根据楼主原意修改下我2楼的代码:
@echo off
for /f "delims=" %%i in (a.txt) do set /a m+=1&set n=0&set str=%%i&call :lp %%str%%
pause>nul&goto :eof
:lp
set /a n+=1
set str=%str:~1%
if not "%str%"=="" goto lp
if %n% equ 80 ( echo 第%m%行是80个字符) else (echo 第%m%行不是80个字符)
[
Last edited by zw19750516 on 2008-4-19 at 11:39 PM ]
作者: 26933062
时间: 2008-4-20 01:00
:
@echo off
for /f "delims=" %%i in (a.txt) do call :lp "%%i"
pause>nul&goto :eof
:lp
set str=%~1
set /a m+=1
if not "%str:~79,1%"=="" (
if "%str:~80,1%"=="" echo 第%m%行是80个字符
) else (echo 第%m%行不是80个字符)
作者: yilliam
时间: 2008-4-20 10:44
谢谢楼上的高手门。
高手们提供了不同的解决思路,而且是在午夜进行了答复,值得敬佩与学习。
作者: zh159
时间: 2008-4-20 12:20
直接判断每行是否为80字符用 5 楼的好些,如果要显示每行字符数则为 4 楼的
但如果是双字节与单字节混排,80字符长度和160字节长度是不一样的(中文等双字节字符占两位,但用计数法计算只算一位)
借用以前别人的一段计算字节数,单双字节混排(因为用到findstr,所以效率较低):
@echo off
for /f "delims=" %%i in (a.txt) do call :lp "%%i"
pause>nul
exit
:lp
set len=
set /a m+=1
for /f "skip=1 delims=:" %%n in ('^(echo %1^&echo.^)^|findstr /o ".*"') do set/a len=%%n-5
echo 第 %m% 行 %len% 个字符
goto :eof
作者: 26933062
时间: 2008-4-20 12:35
判断字节数为80的行,中文单个字占2字节。
:
@echo off
for /l %%a in (1 1 80) do call set n=.%%n%%
for /f "delims=:" %%a in ('findstr /xn %n% a.txt') do echo 第 %%a 行是 80 个字节。
pause
获取每行的字节数
@echo off&setlocal enabledelayedexpansion
::code 26933062 2008-04-20
set "var=^(type a.txt^&echo.^&echo.^)^|findstr /o .*"
for /f "tokens=1* delims=:" %%a in ('%var%') do (
if defined n (
set /a m=%%a-2-n
set _!h!=第 !h! 行 有 !m! 字节
)
set /a n=%%a,h+=1
)
set /a h-=1,m-=1
set _!h!=第 !h! 行 有 !m! 字节
for /l %%a in (1 1 !h!) do echo !_%%a!
pause
[
Last edited by 26933062 on 2008-4-20 at 11:37 PM ]