Board logo

标题: [已结]求助,从文本中提取符合条件的数据 [打印本页]

作者: cqnc4444     时间: 2008-10-11 13:04    标题: [已结]求助,从文本中提取符合条件的数据

有一大型文本文件a.txt内容如下,100多万行(条)记录,文件大小100多Mb

newStreetAddress:  wyad
newCity: noth
newState: xius
newZIP: 没奇巧
newCountry:  不奔要的
newNumber: sgsds
StreetAddress:  fjhgdfg
City: ghg gdhd
State:  gdhdhd
Zip: ghdhdhd
===中间含有众多不需要的参数===
newStreetAddress:  dhdfhd
newCity:  dhdhd
newState:  jhye
newZIP:  thyete
newCountry:  jfjfg
newNumber:  jkhgff
StreetAddress:  gjkghkg
City:  gkggg
State:  gjkggg
Zip: 25448
===中间含有众多不需要的参数===
newStreetAddress:  erqrr
newCity: ggdhdhd
newState: djhye
newZIP: gthyete
newCountry: ghjfjfg
newNumber: ghdjkhgff
StreetAddress: dghgjkghkg
City: ghdgkggg
State: ghdgjkggg
Zip: ehdfhd


现在要提取出每一行中newStreetAddress、newState、newNumber、Zip后面的信息,能否实现如下输出效果?
请高手指教:

wyad xius sgsds ghdhdhd
dhdfhd jhye jkhgff 25448
erqrr djhye ghdjkhgff ehdfhd

说明:newStreetAddress、newState、newNumber、Zip这些行的排列位置不规则

[ Last edited by HAT on 2008-10-13 at 11:56 ]
作者: tireless     时间: 2008-10-11 16:56

@echo off & setlocal EnableDelayedExpansion
for /f "tokens=1*" %%a in ('findstr "^newStreetAddress" a.txt') do (
     set /a n+=1
     set !n!a=%%b
)
for /f "tokens=1*" %%a in ('findstr "^newState" a.txt') do (
     set /a o+=1
     set !o!b=%%b
)
for /f "tokens=1*" %%a in ('findstr "^newNumber" a.txt') do (
     set /a p+=1
     set !p!c=%%b
)
for /f "tokens=1*" %%a in ('findstr "^Zip" a.txt') do (
     set /a q+=1
     set !q!d=%%b
)

for /l %%c in (1,1,%n%) do echo !%%ca! !%%cb! !%%cc! !%%cd!>>extract.txt
(参考了下 4 楼的代码,修改了下。)

[ Last edited by tireless on 2008-10-11 at 21:40 ]
作者: terrytong     时间: 2008-10-11 18:26
楼主问题好像没有说清楚啊。
如果有100多万行(条)记录,你一行就能显示newStreetAddress后面的值?
确定newStreetAddress的后面只有一个空格?
建议分四个文本文件分别放这些数据。
@echo off & setlocal EnableDelayedExpansion
for /f "tokens=1,*" %%a in ('findstr /I newStreetAddress a.txt') do @echo %%b>>newStreetAddress.txt
for /f "tokens=1,*" %%a in ('findstr /I newState a.txt') do @echo %%b>>newState.txt
for /f "tokens=1,*" %%a in ('findstr /I newNumber a.txt') do @echo %%b>>newNumber.txt
for /f "tokens=1,*" %%a in ('findstr /I Zip a.txt') do @echo %%b>>Zip.txt
作者: pusofalse     时间: 2008-10-11 19:09

@echo off
for /f "tokens=1*" %%i in ('findstr "^newStreetAddress ^newState ^newNumber ^Zip" a.txt') do echo>>new.txt %%j
start new.txt

作者: cqnc4444     时间: 2008-10-12 19:01
谢谢三位兄弟 昨天没条件上网 测试一下代码
作者: cqnc4444     时间: 2008-10-12 20:55
代码运行一个多小时后,结果出来了,4楼兄弟的代码运行效率最高,能在4个参数完整时正确取数;2楼兄弟的代码因是逐个参数取数据,取数完整性要好一些,运行时间上要多一些;3楼兄弟的代码也是逐个参数取数据,并生成不同的文件,可以手工生成合并数据。

我以前是用VFP编写简单程序取数,但原代码和执行文件都找不到了。
再次感谢234楼的兄弟们的热情支持,你们帮我解决了大问题。祝你们在中国DOS联盟和互联网世界玩得自在和愉快!