Board logo

标题: [文本处理] 批处理如何过滤文件中的退格键、回车符? [打印本页]

作者: cjiabing    时间: 2010-10-11 09:52     标题: 批处理如何过滤文件中的退格键、回车符?

除第一个外其它字符开头均含有退格键/回车键,无法用FOR,使用type也清除不了,求助!~
要求显示每一行,因为我想提取里面的内容。
以下是举例:
A:  48.2 (48.1) of 260.0 (04:20.0)  0.6%                  
A: 153.2 (02:33.2) of 260.0 (04:20.0)  0.5%                    
我想提取第二个括号内的内容,即48.1和02:33.2,进一步只提取数字,不要标点符号。
文本内基本上都是这种行。

  1. @echo off
  2. for /f "delims=" %%a in ('more   tuigj.txt') do echo %%a
  3. pause
  4. type tuigj.txt
  5. pause
  6. more /T8 /e  tuigj.txt
  7. pause
  8. findstr "[0-9]" tuigj.txt
  9. pause
复制代码

[ 本帖最后由 cjiabing 于 2010-10-11 21:57 编辑 ]
作者: zz100001    时间: 2010-10-11 11:08

我怎么看不见退格符呢,你是怎么看到的?
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /l %%i in (1,1,43) do set "b= !b!"   %% 连一块了,找个换行点。 %%
  4. set /p s=<"tuigj.txt"
  5. set "s=!s:%b%=%b%&echo.!"
  6. for /f "delims=" %%a       ^% 如果只需要显示直接用 echo 语句即可。 ^%
  7. in ('cmd /c echo %%s%%')   ^% 要获取每一行供使用,此命令获得输出。 ^%
  8. do echo %%a
  9. pause
复制代码

作者: hfg1977    时间: 2010-10-11 11:22

  1. sed "s/\(w*%\)/\1\n/g" tuigj.txt
复制代码

作者: cjiabing    时间: 2010-10-11 11:32     标题: 回复 2楼 的帖子

使用系统自带的记事本查看可以看到,用Notepad++看不到的。
晕!~使用上传的附件得,但在原始文件中不得,原始文件基本上都是这些符号,有上千上万行!~
你的那些“^% ”用法很诡异!~学习了!~
作者: cjiabing    时间: 2010-10-11 11:44     标题: 回复 3楼 的帖子

似乎不得!
A:  48.2 (48.1) of 260.0 (04:20.0)  0.6%                  
A: 153.2 (02:33.2) of 260.0 (04:20.0)  0.5%                    
我想提取第二个括号内的内容,即48.1和02:33.2,进一步只提取数字,不要标点符号。
文本内基本上都是这种行。
每个A前面都有一个退格符。
如果不使用第三方更好,我对sed一窍不通呢1~
谢谢。
作者: zz100001    时间: 2010-10-11 12:18

所有的行都是以 A: 开头的?

批处理弄出来的是一行,必须有个确定的标识去分开它们。

我这个方法支持的长度有限,还是找找其他办法。

哦,那个不是退格符,而是回车符, 0x0D

[ 本帖最后由 zz100001 于 2010-10-11 12:35 编辑 ]
作者: hfg1977    时间: 2010-10-11 16:46

获得第一个括号中的内容. 放在bat中:
  1. @echo on
  2. sed "s/\(A:   [0-9]\+.[0-9]\+ (\)\([0-9]\+.[0-9]\+\)\() of [0-9]\+.[0-9]\+ (\)\([0-9]\+.[0-9]\+\)\()  \w\+.\w\+%%\)\( \+\)/\2\n/g" tuigj.txt
  3. @echo off
复制代码
for 赋值:
  1. for /f %%a in ('sed "s/\(A:   [0-9]\+.[0-9]\+ (\)\([0-9]\+.[0-9]\+\)\() of [0-9]\+.[0-9]\+ (\)\([0-9]\+.[0-9]\+\)\()  \w\+.\w\+%%\)\( \+\)/\2\n/g" tuigj.txt') do echo %%a
复制代码

[ 本帖最后由 hfg1977 于 2010-10-11 16:55 编辑 ]
作者: cjiabing    时间: 2010-10-11 18:40     标题: 回复 7楼 的帖子

谢谢了,我这里失败了
  1. sed: couldn't write 1698239 items to stdout: Not enough space
复制代码

作者: cjiabing    时间: 2010-10-11 18:41     标题: 回复 6楼 的帖子

基本上是这样的,对,可能是回车符,呵呵,我不大懂这个符号。
现在先放一放吧,以后有好想法了再处理。
作者: powerbat    时间: 2010-10-11 19:28

  1. @set @bat=1 // & cscript -nologo -e:jscript "%~f0" & pause & exit /b
  2. f = "C:\\a b\\tuigj.txt";
  3. fso = new ActiveXObject('Scripting.FileSystemObject');
  4. s = fso.OpenTextFile(f).ReadAll().replace(/\r\n?/g,'\r\n');
  5. fso.OpenTextFile('02.txt',2,true).Write(s);
  6. WScript.Echo(s);
复制代码

作者: pengtmy    时间: 2010-10-11 20:12     标题: 我来了

帮你顶上去,顺便学习知识
作者: cjiabing    时间: 2010-10-11 20:48     标题: 回复 10楼 的帖子

你们懂得可真多啊!~偶都不懂VB。
运行了,出现错误:
C:\ddd.bat(4, 1) Microsoft JScript 运行时错误: 错误的文件名或号码?
我改了第二行的路径还是错!~
作者: Batcher    时间: 2010-10-11 20:57     标题: 回复 5楼 的帖子

能否把所有要求全部更新到顶楼?
作者: Batcher    时间: 2010-10-11 21:07     标题: 回复 12楼 的帖子

f = "C:\\a b\\tuigj.txt";
改成你自己的实际路径
作者: cjiabing    时间: 2010-10-11 21:57     标题: 回复 14楼 的帖子

已经换了,在C盘下,没见得!
作者: Batcher    时间: 2010-10-11 22:22

C:\Test>type test.bat
@set @bat=1 // & cscript -nologo -e:jscript "%~f0" & exit /b
f = "C:\\test\\1.txt";
fso = new ActiveXObject('Scripting.FileSystemObject');
s = fso.OpenTextFile(f).ReadAll().replace(/\r\n?/g,'\r\n');
fso.OpenTextFile('02.txt',2,true).Write(s);

C:\Test>test.bat

C:\Test>type 02.txt
A:   0.0 (00.0) of 17.0 (17.0)  1.5%
A:   0.0 (00.0) of 17.0 (17.0)  1.5%
A:   0.0 (00.0) of 17.0 (17.0)  1.5%
A:   0.0 (00.0) of 17.0 (17.0)  1.5%
A:   0.0 (00.0) of 17.0 (17.0)  1.4%
A:   0.0 (00.0) of 17.0 (17.0)  1.4%
A:   0.1 (00.0) of 17.0 (17.0)  1.4%
A:  48.2 (48.1) of 260.0 (04:20.0)  0.6%
A: 153.2 (02:33.2) of 260.0 (04:20.0)  0.5%

作者: plp626    时间: 2010-10-17 20:13

原帖由 powerbat 于 2010-10-11 19:28 发表
@set @bat=1 // & cscript -nologo -e:jscript "%~f0" & pause & exit /b
f = "C:\\a b\\tuigj.txt";
fso = new ActiveXObject('Scripting.FileSystemObject');
s = fso.OpenTextFile(f).ReadAll().replace(/\r\n ...


>>>>>>>>>>>>>>>>>>>>>>>

                                               马甲 ??????????????

[ 本帖最后由 plp626 于 2010-10-17 20:15 编辑 ]




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