中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 如何统计文本文件每行中特定字符出现次数?
作者:
标题: 如何统计文本文件每行中特定字符出现次数? 上一主题 | 下一主题
namelessone
新手上路





积分 7
发帖 6
注册 2009-8-20
状态 离线
『楼 主』:  如何统计文本文件每行中特定字符出现次数?

有一个文本文件,类似于csv逗号分割格式,现在想用统计每行逗号的个数的方法来检查文件内容是否被损坏,如何用cmd命令脚本来完成这个功能?
比如一个文件先检查第一行,有五个逗号,再检查第二行,如果不等于五个则报错。以此类推……
思路是用for结合findstr,可是还没想好怎么写,大家能帮个忙看看吗 谢了

2009-8-22 09:38
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zqz0012005
中级用户




积分 297
发帖 135
注册 2006-10-21
状态 离线
『第 2 楼』:  

如果只是检查有没有5个逗号,没必要统计。
刚好5个,不多也不少:
@(echo 有错误的行:&more youtfile.txt|findstr /nvx "[^,]*,[^,]*,[^,]*,[^,]*,[^,]*,[^,]*")>err.txt
如果允许多于5个逗号,将/nvx中的x去掉。



hh.exe ntcmds.chm::/ntcmds.htm
2009-8-22 10:11
查看资料  发短消息 网志  OICQ (411976538)  编辑帖子  回复  引用回复
namelessone
新手上路





积分 7
发帖 6
注册 2009-8-20
状态 离线
『第 3 楼』:  

十分感谢,但如果逗号个数不确定呢?最好是按照第一行来确定应有几个,之后的行如果不满足则报错

2009-8-22 11:45
查看资料  发短消息 网志   编辑帖子  回复  引用回复
newxso
初级用户

l i u s s


积分 73
发帖 101
注册 2008-9-17
来自 GZ
状态 离线
『第 4 楼』:  比较文本每行中的逗号是否与第一行相同


@echo off&setlocal enabledelayedexpansion
set file=newxso.txt
for /f "delims=" %%a in (%file%) do (
  set/a m+=1 &set str=%%a &set str=!str: =#! &set str=!str:;=#!
  for %%b in (!str!#) do set/a n+=1
  set/a n-=1
  if !m! equ 1 (set one=!n!
  ) else (
   set/a other=!one!*!m!
   if !other! neq !n! goto err
  )
)
if %one% equ 0 goto err
echo %file% 中其它行的逗号数与第一行相同。
)
pause>nul
exit

:err
echo %file% 中其它行的逗号数与第一行不相同,或没有逗号。
pause>nul
exit

以上代码只适合对逗号的检测,如果是其它符号(假设是句号),则把第四行改成:

set/a m+=1 &set str=%%a &set str=!str: =#! &set str=!str:,=#! &set str=!str:;=#! &set str=!str:.=,!

[ Last edited by newxso on 2009-8-24 at 05:39 ]

2009-8-23 19:24
查看资料  发短消息 网志   编辑帖子  回复  引用回复
newxso
初级用户

l i u s s


积分 73
发帖 101
注册 2008-9-17
来自 GZ
状态 离线
『第 5 楼』:  

如果借用一下VBS的话,准确度较高,例如文本中出现连续的逗号,但这样代码执行速度将慢些:
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%a in (newxso.txt) do (
   set/a n+=1
   call :vbs "%%a"
   if !n! equ 1 (set one=!num!) else (if !one! neq !num! goto err)
)
if %one% equ 0 (echo 没有逗号。) else (echo 逗号数相同。)
pause>nul
exit

:vbs
echo WSH.Echo UBound(Split("%~1",","))>tmp.vbs
for /f %%a in ('cscript //nologo /e:vbs tmp.vbs') do set num=%%a
del tmp.vbs
goto :eof

:err
echo 逗号数不同。
pause>nul


2009-8-24 08:23
查看资料  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: