Perl 如何扫描多个文本文件以获取信息,并将其复制到选项卡分隔的文件中

Perl 如何扫描多个文本文件以获取信息,并将其复制到选项卡分隔的文件中,perl,tsv,Perl,Tsv,超级N00在这里试图得到一些代码的工作。我基本上有一个项目,我正在解析200个中等大小的文本文件,需要将结果打印到另一个以制表符分隔的文件中。我正试图提取电话、地址和邮政编码,并将它们连同它们来自的文件名一起打印在一行上 我已经成功地搜索到了一个电话号码,但我不知道如何在不破坏我所做工作的情况下搜索其他两个字符串 我还遇到了一个问题,文件名打印时带有其中的电话号码,但也带有下一个文本文件中的电话号码 这是我的密码: use strict; use warnings; my $calls_dir

超级N00在这里试图得到一些代码的工作。我基本上有一个项目,我正在解析200个中等大小的文本文件,需要将结果打印到另一个以制表符分隔的文件中。我正试图提取电话、地址和邮政编码,并将它们连同它们来自的文件名一起打印在一行上

我已经成功地搜索到了一个电话号码,但我不知道如何在不破坏我所做工作的情况下搜索其他两个字符串

我还遇到了一个问题,文件名打印时带有其中的电话号码,但也带有下一个文本文件中的电话号码

这是我的密码:

use strict;
use warnings;

my $calls_dir = "Ask/";
opendir( my $search_dir, $calls_dir ) or die "$!\n";
my @files = grep /\.html$/i, readdir $search_dir;
closedir $search_dir;
print "Got ", scalar @files, " files\n";

my %seen = ();
foreach my $file (@files) {
    my $current_file = $calls_dir . $file;
    open my $FILE, '<', $current_file or die "$file: $!\n";

    while (<$FILE>) {
        #if (/phone/i) {
        chomp;

        #if (/phone\s*(.*)\r?$/i) {
        #if (/^phone\s*:\s*(.*)\r?$/i) {
        if (/Phone:\s*(.*)\r?$/i) {
            $seen{$1} = 1;

            foreach my $addr ( sort keys %seen ) {
                print "\n";
                print "\n";
                print $file;
                print "$addr\n";
                print "\n";
                print "\n";
            }
        }
    }
    close $FILE;
}
问题是第一个数字在第二行打印第二个公司名称。第3行用正确的电话号码打印文件名。问题是由于文件中的搜索花费了这么长时间吗?不确定。再次感谢您的帮助

下面是我正在分析的其中一个文件的示例:

文件:Ask/Illumina_Ask.html AnswersQ&A社区登录注销高级搜索asklogo*一切*图片*新闻*视频*购物*更多*地图*更少探索关于-----------的答案*电话号码属于*免费手机号码搜索*拥有电话号码需要姓名*将电话号码与人匹配*灰狗时间表和票价*贾斯汀·比伯*电话号码查找*免费未登录电话号码搜索*灰狗巴士电话号码*识别电话号码*手机目录*麦莉·塞勒斯更多答案联系我们|联系Illumina技术支持和其他关键部门www.Illumina.com/company/Contact_Us.ilmn查找客户的电子邮件和电话联系信息寻求技术支持或客户服务,投资者,客户。。。联系我们。。。免费电话号码。。。地点| Illumina商业办公地点www.Illumina.com/company/contact-us/Locations.ilmn 1.608.258.3080北美以外的地区1.608.258.3088。。。1.408.861.3610电话。。。Rm。朝阳区曙光西里凤凰广场A5号H栋1103A Illumina |基因研究的测序和基于阵列的解决方案www.Illumina.com/Illumina的测序和阵列技术推动了生命科学研究、翻译和消费者研究的进步。。。联系我们·MyIllumina;工具。支持-Illumina Support.Illumina.com/联系我们·MyIllumina;工具基地空间·-设计工作室·-分析设计。。。使用自定义协议选择器»个性化您的Illumina用户指南。。。关于美国-Illumina www.Illumina.com/company/About-Us.ilmn SNP基因分型;拷贝数变化;基因组测序;脱氧核糖核酸并在他们与我们的关系中提供支持,以最大限度地提高他们的科学成就。供应商|当前和未来Illumina供应商的常见问题解答www.Illumina.com/company/contact-us/Suppliers.ilmn银行信息:美国银行信用查询服务。。。传真号码415.343.9301。贸易信用。。。电话:408.245.5150分机155。VWR International,LLC Careers |现在加入我们,帮助我们改变现状-Illumina www.Illumina.com/company/Careers.ilmn Creativity帮助建立了我们的公司,并继续推动我们的发展。我们有一个不懈的努力,以使伟大的产品,可以改善人类健康。我们已经。。。Illumina公司-加利福尼亚州圣地亚哥-生物技术| Facebook www.Facebook.com/illuminainc。。。916人在这里。Illumina致力于通过解锁。。。电子邮件或电话,密码。让我。。。。10月9日,Evan Eichler博士与我们一起讨论自闭症的新突变、基因和途径。在这里注册:。。。蝙蝠是埃博拉病毒的储存库,没有任何疾病症状。在Illumina | Glassdoor工作www.Glassdoor.com/Overview/Working-at-Illumina-EI|u IE11671.11,19.htm。。。在Illumina工作。工资、评论等——全部由在Illumina工作的员工发布。。。关于我们;我们的价值观;回馈;为什么是Illumina?职业。Illumina测序技术| Perkinlemer www.perkinlemer.com/pages/020/genomic_analysis/Illumina-Sequencing-Technology.xhtml欢迎来宾登录/注册;美国改变。。。。Illumina是用于基因分析的下一代测序技术的领先供应商。。。探索更多关于----------------*街道地址电话号码*名人电话号码*免费查找手机号码服务*免费反向手机目录*我有一个地址但需要一个电话号码*贾斯汀·比伯真实电话号码*免费查找手机号码*克里斯·布朗12345678910Next»热门问答------问:查佩的Illumina sp电影院的电话号码是多少A:919-932-9000阅读更多节目时间?来源:www.chacha.com问:美国有多少活跃的电话号码?------------------------------------答:分配的地理电话号码在700M-800M之间。提供电信服务 ER是唯一知道他们有多少活动号码的实体。。。阅读更多?来源:www.qoura.com问:我们的电话号码是多少?-----------答:美国的电话号码是1,然后是你打电话到的任何州的区号,然后是后面的7位数字。阅读更多»来源:wiki.answers.com问:如何在美国手机网络上屏蔽电话号码。--------------------------A:1。在手机键盘上拨67。2.拨你想拨的号码。3.按手机上的发送或绿色电话按钮。阅读更多»来源:www.ehow.com问:美国支持NFC的手机大约有多少答:如果你想了解美国支持nfc的手机的具体情况,可以参考下面的链接。希望能对你有所帮助。nfc pho。阅读更多»来源:www.quora.com移动网站·关于·隐私·条款·职业·询问博客·问答·移动·帮助·****************************************

我现在还有一个问题,我认为我必须匹配Phone:我现在需要匹配Phone或+1,或者返回一个数字,因为格式都不同

我的这行代码: 如果/电话:\s**\r?$/i{ $seen{$1}=1

需要一些东西来完成这一点,但我不知道怎么做。

我会用glob替换opendir代码段

例如

此外,您正在测试一个模式,以查看模式是否匹配。然后,将其添加到哈希中。然后迭代哈希中的每个键。为什么?这将是导致问题的原因-因为$seen会累积您运行的每个文件的条目,因此foreach循环变长。您可以通过在foreach循环中声明%seen来避免这种情况


否则-根据您的输入文件格式,您可能需要进行多个模式匹配-地址、电话号码等各一个,然后将其插入到散列中,并在循环外打印。

您的输入文件格式是什么?请向我们提供输入文件示例,以使其清晰可见。请显示您的输入文件示例。另外,如果可能的话,请直接从您的数据源文件中复制并粘贴它,而不是给出这样的答案。我意识到,个人详细信息可能很敏感,但如果您更改,例如,不同字母的字母,不同数字的数字,则可以,只要我们可以看到文件的基本布局。这很好如果没有它,很难有帮助。在上面添加了示例文件。谢谢。好的,我按照您的建议使用打印功能,并在循环中声明$seen。谢谢。
out_Agilent_Technologies_ask.html+1 408-555-8886. Fax: +1 408-555-8474.
out_Illumina_ask.html+1 408-555-8886. Fax: +1 408-555-8474.
out_Illumina_ask.html408.555.5150
for my $filename ( glob("$calls_dir/*.html") ) {
    open( my $filehandle, "<", $filename ) or die $!;
    while (<$filehandle>) {
        # do stuff
    }
}