【发布时间】:2014-12-09 17:20:45
【问题描述】:
我正在尝试解析目录中包含单词“Phone:”的 40 多个文本文件,并打印字符串后面的电话号码。我是一个超级 perl 新手,所以非常感谢任何帮助。 我必须注释掉 strict 否则它不会运行,
这是我的代码:
#!/usr/bin/perl
#use strict;
use warnings;
my $DIR = "/Ask";
opendir $DIR, '.' or die "opendir .: $!\n";
my @files = grep /\.txt$/i, readdir $DIR;
closedir $DIR;
print "Got ", scalar @files, " files\n";
my %seen = ();
foreach my $file (@files) {
open my $FILE, '<', $file or die "$file: $!\n";
while (<$FILE>) {
#print "test\n";
if (/^phone\s*(.*)\r?$/i) {
$seen{$1} = 1;
foreach my $addr ( sort keys %seen ) {
print "$addr\n";
}
}
}
close $FILE;
}
它会看到文件,但似乎从不匹配参数并打印结果。 我还可以轻松地将文件转换为 html 并以这种方式解析它们。
感谢您迄今为止的所有帮助。以下是提出的更多问题以及我正在解析的文件示例:
这是我正在解析的短文件示例 - Agilent Technologies, Inc.总部。免费电话:+1 877-424-4536,电话:4083458886。传真:+1 408-345-8474 地址:5301 Stevens Creek Blvd - 我认为我遇到的问题是电话:并不总是在行的开始。如果我修改我的文件并将其放在那里一切正常,但我认为脚本在一行中间找到它时会遇到问题。想法?
【问题讨论】:
-
您可能需要在问题中添加 Perl 标签以获得更多相关的查看者。
-
您的正则表达式中的
/^phone之后是否需要:? -
是的,将您的正则表达式更改为
^phone\s*:\s*(.*)\r?$ -
你也应该取消评论
use strict; -
禁用
strict就像在汽车指示灯上贴胶带一样好。在这两种情况下,它看起来都解决了问题。