免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2133 | 回复: 7
打印 上一主题 下一主题

求助下面的数据列表中的数据提取问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-12-09 13:18 |只看该作者 |倒序浏览
cdentA  troteA    cdentB    troteB   Type     PubM
02995   4089      04484     4093     YH       16189514,15231748
01898   7429      00017     71       IV       3510866,6893424
02153   7114      00017     71       iV       15163409,10848969
03014   1173      03690     1856     yH       16189514
02319   10134     00017     71       iV       10958671
02458   9087      00017     71       iv       8416954
02549   4130      00017     71       iv       7820861
03014   1173      04318     10320    yh       16189514
02991   4306      00017     71       iv       8612804
.
.
.
.
.
.
请教一下cdentA和cdentB下的号码怎么样提取出来,可不可以不用模式匹配了,有不有直接读取像这种数据列表格式文件的模块,能把相关头标注下的内容提取出来,
先谢谢一个!

论坛徽章:
0
2 [报告]
发表于 2007-12-09 13:52 |只看该作者
use strict;
use warnings;

for (<DATA>) {
&nbsp;&nbsp;&nbsp;&nbsp;my @fields = (split /\s+/)[0, 2];
&nbsp;&nbsp;&nbsp;&nbsp;print "@fields\n";
}


__DATA__
cdentA  troteA    cdentB    troteB   Type     PubM
02995   4089      04484     4093     YH       16189514,15231748
01898   7429      00017     71       IV       3510866,6893424
02153   7114      00017     71       iV       15163409,10848969

论坛徽章:
0
3 [报告]
发表于 2007-12-09 20:36 |只看该作者

回复 #2 Lonki 的帖子

谢谢Lonki兄弟!!

论坛徽章:
0
4 [报告]
发表于 2007-12-10 09:59 |只看该作者
如何从别外一个文件中读入呢。
#cat data.txt
cdentA  troteA    cdentB    troteB   Type     PubM
02995   4089      04484     4093     YH       16189514,15231748
01898   7429      00017     71       IV       3510866,6893424
02153   7114      00017     71       iV       15163409,10848969
要读入data.txt文件中的数据应该怎么写呢?
还有个问题上文的
__DATA__
这个__代表什么。
新手请多指教!

论坛徽章:
0
5 [报告]
发表于 2007-12-10 12:45 |只看该作者
open(FH, '<', 'data.txt') or die "Cannot open data.txt: $!\n";
while (<FH>) { ... }


__DATA__表示其后的数据作为DATA的内容, 可以用<DATA>来读取

论坛徽章:
0
6 [报告]
发表于 2007-12-10 12:50 |只看该作者
Perl有两个记号__DATA__和__END__,作为在代码中存储数据的。当用这两个记号时,perl不会认为记号之后的内容是代码。读取这些内容的时候,只要从DATA句柄读就可以读取__DATA__或
__END__之后的内容了。

论坛徽章:
0
7 [报告]
发表于 2007-12-10 13:52 |只看该作者
多谢二位,学习了。

论坛徽章:
0
8 [报告]
发表于 2007-12-10 14:16 |只看该作者
再问一下,还有一点不明白。
cat data.txt
cdentA  troteA    cdentB    troteB   Type     PubM
02995   4089      04484     4093     YH       16189514,15231748
01898   7429      00017     71       IV       3510866,6893424
02153   7114      00017     71       iV       15163409,10848969
03014   1173      03690     1856     yH       16189514
02319   10134     00017     71       iV       10958671
02458   9087      00017     71       iv       8416954
02549   4130      00017     71       iv       7820861
03014   1173      04318     10320    yh       16189514
02991   4306      00017     71       iv       8612804

cat test1
#!/usr/bin/perl
open(FH, '<', 'data.txt') or die "Cannot open data.txt: $!\n";
for (<FH>) {
   my @fields = (split /\s+/)[0, 2];
    print "@fields\n";
};

cat test2
#!/usr/bin/perl
open(FH, '<', 'data.txt') or die "Cannot open data.txt: $!\n";
while (<FH>) {
   my @fields = (split /\s+/)[0, 2];
    print "@fields\n";
}
这里for 和while 好像没什么区别,得出结果都有一样,应该怎么理解?
还有为什么有些行尾加不加 ; 号都可以呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP