标题: 如何统计文本文件每行中特定字符出现次数?
[打印本页]
作者: namelessone
时间: 2009-8-22 09:38
标题: 如何统计文本文件每行中特定字符出现次数?
有一个文本文件,类似于csv逗号分割格式,现在想用统计每行逗号的个数的方法来检查文件内容是否被损坏,如何用cmd命令脚本来完成这个功能?
比如一个文件先检查第一行,有五个逗号,再检查第二行,如果不等于五个则报错。以此类推……
思路是用for结合findstr,可是还没想好怎么写,大家能帮个忙看看吗 谢了
作者: zqz0012005
时间: 2009-8-22 10:11
如果只是检查有没有5个逗号,没必要统计。
刚好5个,不多也不少:
@(echo 有错误的行:&more youtfile.txt|findstr /nvx "[^,]*,[^,]*,[^,]*,[^,]*,[^,]*,[^,]*")>err.txt
如果允许多于5个逗号,将/nvx中的x去掉。
作者: namelessone
时间: 2009-8-22 11:45
十分感谢,但如果逗号个数不确定呢?最好是按照第一行来确定应有几个,之后的行如果不满足则报错
作者: newxso
时间: 2009-8-23 19:24
标题: 比较文本每行中的逗号是否与第一行相同
@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 ]
作者: newxso
时间: 2009-8-24 08:23
如果借用一下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