中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-05 07:47
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]如何在文本文件中搜索并提取数据? 查看 900 回复 3
楼 主 [求助]如何在文本文件中搜索并提取数据? 发表于 2007-07-01 19:17 ·  中国 北京 电信
新手上路
积分 4
发帖 1
注册 2007-07-01 18:48
19年会员
UID 92876
性别 男
状态 离线
首先谢谢大家!
数据格式如下,有三万多行,现在的问题是:
如何从庞大的数据中找出Total不等于0的酒店,然后把ARRIVALS这一行的酒店名称提取出来。老婆每个月都要处理这样的数据,工作得很辛苦,请大家帮帮忙,写个批处理,鄙人在这里鞠躬了。

ARRIVALS: 10005 - Five Rams City Hotel Guangzhou

Arr Date Name #Nt #Rm Room Description Rate Plan Rate Resv Num
---------- ---------------- --- --- -------------------- --------- ------- --------
Total: 0
Guangzhou Hotel Eelan Reservations
Great Hotels Organization China Customer Support
Tel+86 27 67845050

ARRIVALS: 10006 - Guangzhou Hotel Eelan

Arr Date Name #Nt #Rm Room Description Rate Plan Rate Resv Num
---------- ---------------- --- --- -------------------- --------- ------- --------
2007-06-03 HAMILTON, MATTHE 1 1 PREMIUM TWRM PRPRTWRM 40.00 180775384
2007-06-22 ORUNSOLU, KOLAWO 7 1 PREMIUM TWRM PRPRTWRM 40.00 180546312
Total: 2
Eastrn Inn Beijing Reservations
Great Hotels Organization China Customer Support
Tel+86 27 67845050

ARRIVALS: 10007 - Eastern Inn Beijing

Arr Date Name #Nt #Rm Room Description Rate Plan Rate Resv Num
---------- ---------------- --- --- -------------------- --------- ------- --------
Total: 0
Goodsun International Business Apartment Reservations
Great Hotels Organization China Customer Support
Tel+86 27 67845050
2 发表于 2007-07-01 19:51 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线
假设你的数据库文件为hotel.txt,在命令行执行下面的代码
gawk "{if($0~/*ARRIVALS:/)result=$0;if($0~/^Total:.*/)if($2!=0)print result}" hotel.txt


其中 Gawk 是个外部工具,Gawk 下载地址:
http://www.cn-dos.net/forum/viewthread.php?tid=31098&page=1#pid205571
3 发表于 2007-07-01 19:52 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线
没有考虑用批处理来处理是因为文件有3万多行,太大了,用批处理来处理太慢了。
4 发表于 2007-07-02 10:08 ·  中国 四川 成都 电信
初级用户
游荡的孤魂
积分 79
发帖 29
注册 2007-04-02 11:08
19年会员
UID 83714
性别 男
来自 湖南
状态 离线
  用纯批处理测试了一下3W多行的数据,发现速度还过得去:

@echo off
:: 如果要去掉酒店编号及短横线,请把 echo !str!>>list.txt 换成 echo !str:*-!>>list.txt
set bg=%time%
cd.>list.txt
setlocal enabledelayedexpansion
for /f "tokens=1*" %%i in (test.txt) do (
if /i "%%i"=="ARRIVALS:" set str=%%j
if /i "%%i"=="Total:" if %%j neq 0 echo !str!>>list.txt
)
echo %bg% %time%
pause
论坛跳转: