中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-10 00:56
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结]求助,从文本中提取符合条件的数据 查看 873 回复 5
楼 主 [已结]求助,从文本中提取符合条件的数据 发表于 2008-10-11 13:04 ·  中国 四川 攀枝花 电信
新手上路
积分 14
发帖 9
注册 2008-10-11 00:58
17年会员
UID 128043
性别 男
状态 离线
有一大型文本文件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 ]
2 发表于 2008-10-11 16:56 ·  中国 江西 赣州 电信
银牌会员
★★★★
积分 2,025
发帖 1,122
注册 2007-09-05 20:15
18年会员
UID 96653
性别 男
状态 离线
@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
3 发表于 2008-10-11 18:26 ·  中国 上海 上海地面通信息网络有限公司
中级用户
★★
积分 240
发帖 115
注册 2008-03-10 19:31
18年会员
UID 112561
性别 男
状态 离线
楼主问题好像没有说清楚啊。
如果有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
4 发表于 2008-10-11 19:09 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
18年会员
UID 115804
性别 男
状态 离线
@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...^_^
5 发表于 2008-10-12 19:01 ·  中国 四川 攀枝花 电信
新手上路
积分 14
发帖 9
注册 2008-10-11 00:58
17年会员
UID 128043
性别 男
状态 离线
谢谢三位兄弟 昨天没条件上网 测试一下代码
6 发表于 2008-10-12 20:55 ·  中国 四川 攀枝花 电信
新手上路
积分 14
发帖 9
注册 2008-10-11 00:58
17年会员
UID 128043
性别 男
状态 离线
代码运行一个多小时后,结果出来了,4楼兄弟的代码运行效率最高,能在4个参数完整时正确取数;2楼兄弟的代码因是逐个参数取数据,取数完整性要好一些,运行时间上要多一些;3楼兄弟的代码也是逐个参数取数据,并生成不同的文件,可以手工生成合并数据。

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