Board logo

标题: [文本处理] [已解决]批处理怎样比较文本文件内字符长度? [打印本页]

作者: hucuibai    时间: 2011-4-11 10:05     标题: [已解决]批处理怎样比较文本文件内字符长度?

本帖最后由 hucuibai 于 2011-4-12 10:15 编辑

我有一个文本文件,内容是这样的
"2011-3-29 0:0:35",1,56129910365,56148967108,5008,71,3,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0
"2011-3-29 0:0:35",1,56129910365,43205880120,112008,76,3,0,5,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0
"2011-3-29 7:6:53",2,108066225232,116886745578,14,3,60,57,68,96,56,331701,320101,230904,0,0,4
"2011-3-29 7:6:53",2,108066225232,112414243532,20,3,78,95,74,67,64,130701,120101,320501,130501,230601,4
"2011-3-29 23:59:43",2,112424790273,116838673172,24,3,70,92,51,69,95,230905,320201,0,0,0,4

这只是其中一部分,前两行是正确的格式,就的,分割的数都是一样的,但是后面3行就没有那么多,我要删除这些格式错误的行(后面三行)!要怎么写,求教!

附件传上来了


或者说如何统计
"2011-3-29 0:0:35",1,56129910365,56148967108,5008,71,3,0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0
这个标准格式字符内逗号的个数?
作者: hanyeguxing    时间: 2011-4-11 11:17

  1. @echo off&setlocal enableDelayedExpansion
  2. set "a=PlayerPropertyLog20110329.txt"
  3. (for /f "tokens=1* delims=," %%a in ('type "%a%"') do (
  4. set "b=%%b"
  5. for /l %%c in (0,1,8192) do if "!b:~%%c,1!"=="," set/a c+=1
  6. if not defined d set d=!c!
  7. set/a e=d-c,c=0
  8. if !e! neq 0 for /l %%c in (1,1,!e!) do set b=!b!,0
  9. echo;%%a,!b!
  10. ))>"输出_%a%"
复制代码

作者: hucuibai    时间: 2011-4-11 11:26

2# hanyeguxing


高手,有些地方看不懂,如果我想要删除这些行呢?
作者: hanyeguxing    时间: 2011-4-11 11:34

3# hucuibai
  1. @echo off&setlocal enableDelayedExpansion
  2. set "a=PlayerPropertyLog20110329.txt"
  3. (for /f "tokens=1* delims=," %%a in ('type "%a%"') do (
  4.         set "b=%%b"&set c=0
  5.         for /l %%c in (0,1,8192) do if "!b:~%%c,1!"=="," set/a c+=1
  6.         if not defined d set d=!c!
  7.         if !c!==!d! echo;%%a,!b!
  8. ))>"输出_%a%"
复制代码

作者: hucuibai    时间: 2011-4-11 11:44

4# hanyeguxing

谢谢孤星同志,高手就是高手,有一个问题请教
for /l %%c in (0,1,8192) do if "!b:~%%c,1!"=="," set/a c+=1
这句截取b的时候为什么要加引号,不加就不行!
作者: hanyeguxing    时间: 2011-4-11 12:05

本帖最后由 hanyeguxing 于 2011-4-11 12:09 编辑

if "!b:~%%c,1!"=="," set/a c+=1
如果不加:
"!b:~%%c,1!"中的逗号会被解释为整条语句的分隔符而不是变量截取的分隔符号
","这个逗号也将被解释为整条语句的分隔符而不是字符
测试下面的代码:if,1,==,1,echo,哈哈
这里的逗号就都被解释为分隔符,分隔 if 语句中的命令、参数
那么原来的命令就会被解释为:
if !b:~%%c1!== set/a c+=1
语法错误!~
作者: hucuibai    时间: 2011-4-11 13:14

6# hanyeguxing


非常感谢!!
作者: hucuibai    时间: 2011-4-11 13:42

6# hanyeguxing


孤星大虾,问题又来了,用if语句一行一行匹配打印效率太低了,我的文件有四十多M,有没有简便一点的方法?
作者: Commander    时间: 2011-4-11 15:14

8# hucuibai
  1. type a.txt | findstr ",.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*,.*," >b.txt
复制代码

作者: hucuibai    时间: 2011-4-11 15:23

9# Commander


omg
朝拜一下!!谢谢谢谢!非常感谢!




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2