标题: [文本处理] [已解决]bat判断文本数据连贯性 [打印本页]
作者: inflikt 时间: 2013-10-28 15:57 标题: [已解决]bat判断文本数据连贯性
本帖最后由 inflikt 于 2013-10-28 22:19 编辑
现在有若干txt文件,每个txt文件是如下形式
2009 1 50
2009 2 54
2009 3 45
...
比如a.txt
2009 1
2009 2 33
2009 3 45
这种是缺少有效数据错误
b.txt如下
2009 11 20
2009 12 3
2010 1 4
2010 3 5
这种是时间不连续错误
c.txt如下
2009 11 20
2009 12 3
2010 1 4
2010 1 5
这种是时间重复错误
希望遍历*.txt,并在error.txt中给出如下错误信息
a.txt 缺少有效数据错误
b.txt 时间不连续错误
c.txt 时间重复错误
d.txt 正确,共XX行
如果一个txt中有多个错误的话,随便给出一个就可以,求大大给出解决方案
作者: xxpinqz 时间: 2013-10-28 18:10
本帖最后由 xxpinqz 于 2013-10-28 18:12 编辑
最近看题老是理解出错。。。。。。。是不是这意思:- @echo off&setlocal enabledelayedexpansion
- (for /f "delims=" %%a in ('dir /b *.txt^|findstr /v "error\.txt"') do (
- call :check "%%a" msg
- echo,!msg!
- ))>ERROR.txt
- start ERROR.txt&exit /b
- :check
- set m=&set m1=&set n=0
- for /f "usebackq tokens=1-3" %%i in (%1) do (
- set/a 1/%%i,1/%%j,1/%%k,m=%%i*12+%%j,n+=1 2>nul && (
- if defined m1 (
- if !m1! neq !m! (
- set /a m1-=1
- if !m1! equ !m! (
- set "%2=%~1: 时间重复错误"&goto :eof
- ) else set "%2=%~1: 时间不连续错误"&goto :eof
- )
- )
- set/a m1=m+1
- ) || (
- set "%2=%~1: 缺少有效数据错误"&goto :eof
- )
- )
- set "%2=%~1: 正确,共%n%行"
- goto :eof
复制代码
作者: terse 时间: 2013-10-28 20:20
- @echo off&setlocal enabledelayedexpansion
- for /f "tokens=*" %%a in ('dir /b /a-d *.txt') do (
- set flag=&set s=
- for /f "usebackq tokens=1-3" %%i in ("%%a") do (
- if not defined flag (
- if "%%k" neq "" (
- if "%%j" neq "" (
- if defined s (
- if "!s!" neq "%%i%%j" (
- set /a "n+=1,m=(n+11)%%12+1,j=(n-1)/12,y=i+j"
- if "!y!!m!" neq "%%i%%j" set "flag=%%a 时间不连续错误"
- ) else set "flag=%%a 时间重复错误"
- ) else set /a "i=%%i,n=f=%%j"
- set "s=%%i%%j"
- ) else set "flag=%%a 缺少有效数据错误
- ) else set "flag=%%a 缺少有效数据错误
- )
- )
- if not defined flag set /a n-=f-1 & set flag=%%a 正确 共 !n! 行
- echo !flag!
- )
- pause
复制代码
作者: batman 时间: 2013-10-28 20:33
说句实在话,我真没看懂楼主所描述的时间重复错误是什么概念?
作者: inflikt 时间: 2013-10-28 22:18
感谢xxpinqz,terse大大,测试可用
另外batman大大,时间重复是因为c.txt中有2个2010 1重复月份
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |