找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 25432|回复: 4

[文本处理] [已解决]bat判断文本数据连贯性

[复制链接]
发表于 2013-10-28 15:57:32 | 显示全部楼层 |阅读模式
本帖最后由 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中有多个错误的话,随便给出一个就可以,求大大给出解决方案

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2013-10-28 18:10:17 | 显示全部楼层
本帖最后由 xxpinqz 于 2013-10-28 18:12 编辑

最近看题老是理解出错。。。。。。。是不是这意思:

  1. @echo off&setlocal enabledelayedexpansion
  2. (for /f "delims=" %%a in ('dir /b *.txt^|findstr /v "error\.txt"') do (
  3.     call :check "%%a" msg
  4.     echo,!msg!
  5. ))>ERROR.txt
  6. start ERROR.txt&exit /b
  7. :check
  8. set m=&set m1=&set n=0
  9. for /f "usebackq tokens=1-3" %%i in (%1) do (
  10.     set/a 1/%%i,1/%%j,1/%%k,m=%%i*12+%%j,n+=1 2>nul && (
  11.         if defined m1 (
  12.                 if !m1! neq !m! (
  13.                     set /a m1-=1
  14.                         if !m1! equ !m! (
  15.                             set "%2=%~1: 时间重复错误"&goto :eof
  16.                         ) else set "%2=%~1: 时间不连续错误"&goto :eof
  17.                 )
  18.         )
  19.         set/a m1=m+1
  20.     ) || (
  21.         set "%2=%~1: 缺少有效数据错误"&goto :eof
  22.     )
  23. )
  24. set "%2=%~1: 正确,共%n%行"
  25. goto :eof
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

发表于 2013-10-28 20:20:18 | 显示全部楼层
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=*" %%a in ('dir /b /a-d *.txt') do (
  3.     set flag=&set s=
  4.     for /f "usebackq tokens=1-3" %%i in ("%%a") do (
  5.         if not defined flag (
  6.         if "%%k" neq "" (
  7.            if "%%j" neq "" (
  8.               if defined s (
  9.                  if "!s!" neq "%%i%%j" (
  10.                       set /a "n+=1,m=(n+11)%%12+1,j=(n-1)/12,y=i+j"
  11.                       if "!y!!m!" neq "%%i%%j"  set "flag=%%a 时间不连续错误"
  12.                  ) else set "flag=%%a 时间重复错误"
  13.               ) else  set /a "i=%%i,n=f=%%j"
  14.                 set "s=%%i%%j"
  15.            ) else set "flag=%%a 缺少有效数据错误
  16.         ) else set "flag=%%a 缺少有效数据错误
  17.         )
  18.     )
  19.     if not defined flag set /a n-=f-1 & set flag=%%a 正确 共 !n! 行
  20.     echo !flag!
  21. )
  22. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
inflikt + 1 感谢

查看全部评分

发表于 2013-10-28 20:33:12 | 显示全部楼层
说句实在话,我真没看懂楼主所描述的时间重复错误是什么概念?
 楼主| 发表于 2013-10-28 22:18:57 | 显示全部楼层
感谢xxpinqz,terse大大,测试可用
另外batman大大,时间重复是因为c.txt中有2个2010 1重复月份
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 16:03 , Processed in 0.021056 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表