标题: [求助]如何从txt文件中提取含有指定字符串的整行?
[打印本页]
作者: elsiezhou
时间: 2007-5-10 18:36
标题: [求助]如何从txt文件中提取含有指定字符串的整行?
我有log1.txt文件格式如下:
......
Fichier de controle : Z:\Controle\POTANN.ctl
Fichier de donnee : Z:\Data\POTANN.dat
......
Talbe POTANN :
Chargement réussi de 206108 Lignes.
......
Nombre total d'enregistrements logiques ignores : 0
Nombre total d'enregistrements logiques lus : 206108
Nombre total d'enregistrements logiques rejetes : 0
......
Le debut de l'exécution effectue sur Jeu. Avr. 26 11:38:25 2007
La fin de l'exécution effectuée sur Jeu. Avr. 26 11:38:34 2007
......
PS:......指代若干行其他信息。
我需要编批处理执行后输出一个txt文件格式如下:
Fichier de controle : Z:\Controle\POTANN.ctl
Fichier de donnee : Z:\Data\POTANN.dat
Talbe POTANN :
Chargement reussi de 206108 Lignes.
Nombre total d'enregistrements logiques ignores : 0
Nombre total d'enregistrements logiques lus : 206108
Nombre total d'enregistrements logiques rejetes : 0
Le debut de l'exécution effectue sur Jeu. Avr. 26 11:38:25 2007
La fin de l'exécution effectuée sur Jeu. Avr. 26 11:38:34 2007
由于txt很大,我需要的这些行位置不固定,我想通过查找字符串
Fichier de controle
Fichier de donnee
Talbe
Chargement reussi
Nombre total d'enregistrements logiques ignores
Nombre total d'enregistrements logiques lus
Nombre total d'enregistrements logiques rejetes
Le debut de l'execution
La fin de l'execution
输出含有以上字符串的行。
我已经看过了批处理室经典帖子分类索引中的贴子,试过几个,没成。在此请教帮忙。先谢谢了!
作者: flyinspace
时间: 2007-5-10 19:07
标题: 举个例子,没有测试:)
for /f "tokens=* " %%i in (logo1.txt) do (
echo "%%i" | findstr /i "Fichier de controle"
echo "%%i" | findstr /i "Fichier de donnee"
……(这里省略你需要读出的行)
)
这样就可以了啊?
作者: elsiezhou
时间: 2007-5-10 19:56
for /f "tokens=* " %%i in (f:\logo1.txt) do (
echo "%%i" | findstr /i "Fichier de controle" >>f:\rlt.txt
)
试过了,不行。输出的txt文件是空的。我确定logo1中有这么一行。
作者: lililulula
时间: 2007-5-11 09:31
findstr /c:"Fichier de controle :" log1.txt>log2.txt
findstr /c:"Fichier de donnee :" log1.txt>>log2.txt
..........
.........
findstr /c:"La fin de l'exécution effectuée" log1.txt>>log2.txt
不知道楼主是不是要这样的效果
作者: elsiezhou
时间: 2007-5-11 15:33
我思考了一下,是需要加/c:,但改过之后,还是没有任何纪录。
作者: ttyp
时间: 2007-5-11 15:57
@echo off
for /f "tokens=* " %%i in (logo1.txt) do (
echo "%%i"|find "Fichier de controle">>r.txt
)
作者: ttyp
时间: 2007-5-11 16:01
或者
@echo off
for /f "tokens=* " %%i in (logo1.txt) do (
echo "%%i"|findstr /C:"Fichier de controle">>r.txt
)
作者: lililulula
时间: 2007-5-11 16:05
楼主需要处理的文本是不是有特别格式? 代码应该是没问题的
作者: elsiezhou
时间: 2007-5-11 17:04
处理的文本文件和输出的文件都是txt文件。
问个很低级的问题:
为何要加@echo off
for /f "tokens=* " %%i in (logo1.txt)等命令?
我只要打findstr /C:"Fichier de controle" logo1.txt>>r.txt
findstr /C:"Fichier de donnee" logo1.txt>>r.txt
.......所有我要找得字符串
不就行了?
当我直接用findstr /C:"Fichier de controle" logo1.txt>>r.txt
findstr /C:"Fichier de donnee" logo1.txt>>r.txt......
能出结果,但一加for就不行。
用for /f "tokens=* ".........是不是方便我处理一系列同类型的文件?
如@echo off
for /f "tokens=* " %%i in (logo1.txt logo2.txt logo3.txt) do (
echo "%%i"|findstr /C:"Fichier de controle">>r.txt
echo "%%i"|findstr /C:"Fichier de donnees">>r.txt
echo "%%i"|findstr /C:"Talbe">>r.txt
echo "%%i"|findstr /C:"Chargement reussi">>r.txt
echo "%%i"|findstr /C:"Nombre total d'enregistrements logiques ignores">>r.txt
echo "%%i"|findstr /C:"Nombre total d'enregistrements logiques lus">>r.txt
echo "%%i"|findstr /C:"Nombre total d'enregistrements logiques rejetes">>r.txt
echo "%%i"|findstr /C:"Le debut de l'execution">>r.txt
echo "%%i"|findstr /C:"La fin de l'execution">>r.txt
)
继续请教。谢谢!
作者: lxmxn
时间: 2007-5-11 17:18
将以下内容保存为View.txt:
Quote: |
Fichier de controle
Fichier de donnee
Talbe
Chargement reussi
Nombre total d'enregistrements logiques ignores
Nombre total d'enregistrements logiques lus
Nombre total d'enregistrements logiques rejetes
Le debut de l'execution
La fin de l'execution |
|
然后在命令行执行:
findstr /g:view.txt log1.txt>new.txt
作者: zhoushijay
时间: 2007-5-11 17:44
findstr /c:"Fichier de controle",log.txt
pause
真奇怪,上面个命令在CMD中输入可以运行,放在BAT中就没反映,不知道怎么回事
作者: lxmxn
时间: 2007-5-11 17:57
Quote: |
Originally posted by zhoushijay at 2007-5-11 17:44:
findstr /c:"Fichier de controle",log.txt
pause
真奇怪,上面个命令在CMD中输入可以运行,放在BAT中就没反映,不知道怎么回事 |
|
Quote: |
findstr /c:"Fichier de controle",log.txt |
|
注意空色的",",去掉之后我这里是可以的。