中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [求助]如何在文本文件中搜索并提取数据?
作者:
标题: [求助]如何在文本文件中搜索并提取数据? 上一主题 | 下一主题
longobaba
新手上路





积分 4
发帖 1
注册 2007-7-1
状态 离线
『楼 主』:  [求助]如何在文本文件中搜索并提取数据?

首先谢谢大家!
数据格式如下,有三万多行,现在的问题是:
如何从庞大的数据中找出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

2007-7-1 19:17
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 2 楼』:  

假设你的数据库文件为hotel.txt,在命令行执行下面的代码
gawk "{if($0~/[ \t]*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

2007-7-1 19:51
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 3 楼』:  

没有考虑用批处理来处理是因为文件有3万多行,太大了,用批处理来处理太慢了。

2007-7-1 19:52
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
digger
初级用户

游荡的孤魂



积分 79
发帖 29
注册 2007-4-2
来自 湖南
状态 离线
『第 4 楼』:  

  用纯批处理测试了一下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


2007-7-2 10:08
查看资料  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: