[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]批处理怎样比较文本文件内字符长度?

本帖最后由 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
这个标准格式字符内逗号的个数?
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

  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%"
复制代码
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

2# hanyeguxing


高手,有些地方看不懂,如果我想要删除这些行呢?

TOP

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%"
复制代码
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

4# hanyeguxing

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

TOP

本帖最后由 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
语法错误!~
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

6# hanyeguxing


非常感谢!!

TOP

6# hanyeguxing


孤星大虾,问题又来了,用if语句一行一行匹配打印效率太低了,我的文件有四十多M,有没有简便一点的方法?

TOP

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

评分人数

TOP

9# Commander


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

TOP

返回列表