中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]求助,从文本中提取符合条件的数据
作者:
标题: [已结]求助,从文本中提取符合条件的数据 上一主题 | 下一主题
cqnc4444
新手上路





积分 14
发帖 9
注册 2008-10-11
状态 离线
『楼 主』:  [已结]求助,从文本中提取符合条件的数据

有一大型文本文件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 ]

2008-10-11 13:04
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 2 楼』:  


@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 ]

   此帖被 +1 点积分    点击查看详情   
评分人:【 cqnc4444 分数: +1  时间:2008-10-13 13:46


2008-10-11 16:56
查看资料  发短消息 网志   编辑帖子  回复  引用回复
terrytong
中级用户





积分 240
发帖 115
注册 2008-3-10
状态 离线
『第 3 楼』:  

楼主问题好像没有说清楚啊。
如果有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

2008-10-11 18:26
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pusofalse
银牌会员




积分 1604
发帖 646
注册 2008-4-13
状态 离线
『第 4 楼』:  


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


   此帖被 +1 点积分    点击查看详情   
评分人:【 cqnc4444 分数: +1  时间:2008-10-13 13:47




心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
2008-10-11 19:09
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
cqnc4444
新手上路





积分 14
发帖 9
注册 2008-10-11
状态 离线
『第 5 楼』:  

谢谢三位兄弟 昨天没条件上网 测试一下代码

2008-10-12 19:01
查看资料  发短消息 网志   编辑帖子  回复  引用回复
cqnc4444
新手上路





积分 14
发帖 9
注册 2008-10-11
状态 离线
『第 6 楼』:  

代码运行一个多小时后,结果出来了,4楼兄弟的代码运行效率最高,能在4个参数完整时正确取数;2楼兄弟的代码因是逐个参数取数据,取数完整性要好一些,运行时间上要多一些;3楼兄弟的代码也是逐个参数取数据,并生成不同的文件,可以手工生成合并数据。

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

2008-10-12 20:55
查看资料  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: