标题: [求助] For 在读取txt时莫名退出
[打印本页]
作者: terrytong
时间: 2010-5-9 13:11
标题: [求助] For 在读取txt时莫名退出
现有一个txt文件(B12.txt,如附件), 我用FOR计算里面的PASS和FAIL的数量,但是不知道为什么数量总是不对.
代码如下:
@echo off
setlocal enabledelayedexpansion
set P=0
set f=0
for /f "tokens=1 delims==" %%a in (B12.txt) do (
set result=%%a
set result=!result: =!
if !result! == PASS set /a P+=1
if !result! == FAIL set /a F+=1
)
echo !pass!
echo !Fail!
pause
发现每次FOR只能读到577行就会退出.
然后我打开B12.txt, 直接保存下再读,数量就会正确了,可是怎么也想不通,为什么我什么都没做,只是打开保存了一下就可以读出正确的数值?
请高手们帮我看看是什么原因倒致我刚开始读的数量不正确?
谢谢!
[
Last edited by terrytong on 2010-5-9 at 13:13 ]
附件
1:
B12.rar (2010-5-9 13:11, 15.14 K,下载次数: 7)
作者: tongzj
时间: 2010-5-9 13:43
应该是文本格式错误,重新保存后格式修正了就好了。
[
Last edited by tongzj on 2010-5-9 at 13:45 ]
作者: terrytong
时间: 2010-5-9 14:23
请问除了手动打开再保存后还有更好的办法修正格式错误?
另外想问下一般什么样的情况下会导致这种格式错误啊?
作者: yishanju
时间: 2010-5-9 14:52
我好像是文本里有些莫明的代码或者字符,批处理会出错
作者: Hanyeguxing
时间: 2010-5-9 14:58
原因:在第578行行首有连续51个空字符(00),重新保存后转成51个空格符(20)。
解决:more命令自动将00空字符转成换行(空行)
可以使用下面的代码处理:
@echo off
for /f "delims==" %%a in ('type B12.txt^|more') do (
if /i "%%a"=="PASS" set/a P+=1
if /i "%%a"=="FAIL" set/a F+=1
)
echo.%p%和%F%
pause
不能使用下面的代码,因为将导致P被少计算:
@echo off
for /f "delims==" %%a in ('type B12.txt') do (
if /i "%%a"=="PASS" set/a P+=1
if /i "%%a"=="FAIL" set/a F+=1
)
echo.%p%和%F%
pause
或
@echo off
for /f "delims==" %%a in ('findstr .* B12.txt') do (
if /i "%%a"=="PASS" set/a P+=1
if /i "%%a"=="FAIL" set/a F+=1
)
echo.%p%和%F%
pause
[
Last edited by Hanyeguxing on 2010-5-9 at 16:55 ]
作者: terrytong
时间: 2010-5-9 16:18
非常感谢你的帮忙,谢谢!
再请教下,你是怎么看出是空字符还是空格的?
作者: Hanyeguxing
时间: 2010-5-9 16:36
1,实际上做多了,直接看578行,就能知道是怎么回事
2,打开B12,另存为B13
3,使用下面的代码:
Fc /n B12.txt B13.txt
说明:
Quote: |
正在比较文件 B12.txt 和 B13.TXT
***** B12.txt
577: PASS=CVPO017401VW080JGN =2010-04-22 13:01:20=PASS
578:
579:
......中间的被我省略了
628:
629: PASS=CVPO017401XR080JGN =2010-04-22 13:12:12=PASS
630: PASS=CVPO0174020Y080JGN =2010-04-22 13:19:08=PASS
***** B13.TXT
577: PASS=CVPO017401VW080JGN =2010-04-22 13:01:20=PASS
578: PASS=CVPO017401XR080JGN =2010-04-22 13:12:12=PASS
579: PASS=CVPO0174020Y080JGN =2010-04-22 13:19:08=PASS
***** |
|
4,使用下面的命令查看不同的字符是什么:
Fc /b B12.txt B13.txt
说明:
Quote: |
正在比较文件 B12.txt 和 B13.TXT
00007348: 00 20
00007349: 00 20
......中间的被我省略了
00007379: 00 20
0000737A: 00 20 |
|
5,也可以使用UltraEdit-32等32位编辑器比较。
[
Last edited by Hanyeguxing on 2010-5-10 at 09:53 ]