中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结][求助]如何判断文本文件为定长格式?
作者:
标题: [已结][求助]如何判断文本文件为定长格式? 上一主题 | 下一主题
yilliam
初级用户





积分 32
发帖 9
注册 2006-2-15
状态 离线
『楼 主』:  [已结][求助]如何判断文本文件为定长格式?

求助问题:

判断指定文本文件内容的格式是否为定长,如每行是否为80字符。
请问在CMD环境下可否实现?现实问题,急需解决,请指教。
                          
                                                           ———批处理初学者

在PC环境下Windows文件系统本身没有提供文件记录最大长度的参数吧?

[ Last edited by yilliam on 2008-5-4 at 10:37 AM ]

2008-4-19 23:09
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 2 楼』:  没测试:

如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 ]



批处理之家新域名:www.bathome.net
2008-4-19 23:23
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 3 楼』:  

VBS可以实现……CMD下似乎也可以,不知道特殊字符处理上问题大不大……

2008-4-19 23:24
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 4 楼』:  再修改下:

根据楼主原意修改下我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 ]

   此帖被 +2 点积分    点击查看详情   
评分人:【 yilliam 分数: +2  时间:2008-4-20 10:45




批处理之家新域名:www.bathome.net
2008-4-19 23:35
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 5 楼』:  

:
@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个字符)


   此帖被 +2 点积分    点击查看详情   
评分人:【 yilliam 分数: +2  时间:2008-4-20 10:44




致精致简!
2008-4-20 01:00
查看资料  发短消息 网志   编辑帖子  回复  引用回复
yilliam
初级用户





积分 32
发帖 9
注册 2006-2-15
状态 离线
『第 6 楼』:  

谢谢楼上的高手门。

高手们提供了不同的解决思路,而且是在午夜进行了答复,值得敬佩与学习。

2008-4-20 10:44
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 7 楼』:  

直接判断每行是否为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


   此帖被 +2 点积分    点击查看详情   
评分人:【 yilliam 分数: +2  时间:2008-5-4 10:38




2008-4-20 12:20
查看资料  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 8 楼』:  

判断字节数为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 ]

   此帖被 +2 点积分    点击查看详情   
评分人:【 yilliam 分数: +2  时间:2008-5-4 10:38




致精致简!
2008-4-20 12:35
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: