2014-10-18 60 views
0

超级n00by在这里试图让一些代码工作。我基本上有一个项目,我正在解析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; 
} 

线28 & 29在哪里我现在打印,但我真的想打印分隔到一个文件标签,至于什么我又回到这里是一个例子这个问题:

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 

的问题是第一个号码被印有第二个公司名称线2号线3打印与正确地在它的电话号码的文件名。由于文件中的搜索花了这么长时间,问题是由于?不确定。再次感谢提供的援助。

这里是我解析的文件之一的例子:

文件:问/ Illumina_ask.html AnswersQ &一个社区登录注册用户OutAdvanced SearchaskLogo * *的一切图像*新闻*视频*购物*更多*地图*较少浏览答案关于--------------------- *电话号码属于*免费手机号码搜索*有电话号码需要姓名*匹配电话号码一个人*灰狗计划和车费*贾斯汀比伯*电话号码查询*免费非上市电话号码搜索*灰狗巴士电话号码*识别电话号码*蜂窝电话目录*麦莉赛勒斯更多答案联系我们|访问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电话...室。 1103A,Bldg。 H,凤凰广场朝阳区曙光西里A5号Illumina |基因测序和基于阵列的遗传研究解决方案www.illumina.com/ Illumina的测序和阵列技术推动了生命科学研究,平移和消费者的进步...联系我们·MyIllumina;工具。支持 - Illumina support.illumina.com/联系我们·MyIllumina;工具。 - BaseSpace· - DesignStudio·Assay Design ... x用自定义协议选择器个性化您的Illumina用户指南... ...关于我们 - Illumina www.illumina.com/company/about-us.ilmn SNP基因分型;拷贝数变异;基因组测序; DNA ......并在整个与我们的关系中给予支持以最大限度地提高他们的科学成就供应商|当前和未来Illumina供应商的常见问题解答www.illumina.com/company/contact-us/suppliers.ilmn银行信息:美国银行信用查询服务...传真号码415.343.9301。贸易信贷...电话:408.245.5150分机。 155. VWR International,LLC职业|立即加入我们并帮助实现改变 - Illumina www.illumina.com/company/careers.ilmn创造力帮助我们建立公司并继续推动我们的发展。我们坚持不懈地开发能够改善人类健康的优质产品。我们... Illumina,Inc. - 加利福尼亚州圣地亚哥 - 生物技术| Facebook www.facebook.com/illuminainc ... 916在这里。Illumina致力于通过解锁......电子邮件或电话,密码来促进人类健康。 Keep I .... Evan Eichler,PhD,10月9日加入我们讨论新的突变,基因&自闭症途径。在此注册:...蝙蝠充当埃博拉病毒的储存器,并且不会出现疾病症状。在Illumina工作| Glassdoor www.glassdoor.com/Overview/Working-at-Illumina-EI_IE11671.11,19.htm ...在Illumina工作。薪水,评论等 - 全部由在Illumina工作的员工发布。 ... 关于我们;我们的价值;回馈;为什么选择Illumina?事业。 Illumina测序技术| PerkinElmer www.perkinelmer.com/pages/020/genomic_analysis/illumina-sequencing-technology.xhtml欢迎访客(登录/注册); USA(Change).... Illumina是用于分析遗传的下一代测序技术的领先供应商...探索更多答案关于------------------ -------- *电话号码的街道地址*名人电话号码*免费服务查询手机号码*免费反向手机号码簿*我有一个地址,但需要一个电话号码*贾斯汀比伯电话号码真实*查找手机号码,免费* Chris Brown 12345678910下一页»热门Q & A ----------- Q:Chape的Illumina(sp)电影院的电话号码是什么...... ---- -------------------------------------------------- -----答:919-932-9000在阅读更多资讯»资料来源:www.chacha.com问:美国有多少活动电话号码? -------------------------------------------------- ---答:有700M-800M分配的地理电话号码。 。电信服务提供商是知道他们拥有多少活动号码的唯一实体...阅读更多»资料来源:www.quora.com问:什么是美国的电话号码? ---------------------------------答:美国的电话号码是1,然后是任何地区的区号你打电话的状态,然后是后面的7位数字。阅读更多»资料来源:wiki.answers.com问:如何阻止美国移动电话号码。 - - - - - - - - - - - - - - - - - - - - - - - - 一个: 1.在电话键盘上拨“67”。 2.拨打您想要拨打的号码。 3.按手机上的“发送”或绿色电话按钮。阅读更多»资料来源:www.ehow.com问:美国NFC手机的近似数量是多少? --------------------------------------------------答:如果你想具体了解美国的nfc enable phone,你可以参考下面的链接。希望它有帮助。 。 http://www.nfcrumors.com/。 NFC-河粉。阅读更多»资料来源:www.quora.com手机网站·关于·隐私·条款·职业·咨询博客·Q & A·手机·帮助·****************** **********************

我现在也有问题,我认为我只需要匹配电话:我现在需要匹配电话“或“+1”或“(”返回一个数字,因为格式都不一样。

所以我的这行代码: if(/Phone:\s*(.*)\r?$/i ){$ 看到{$ 1} = 1;

需要的东西来实现这一目标,但我不知道该怎么做

+1

什么是您的输入文件格式? – Sobrique 2014-10-18 16:32:53

+1

向我们提供示例输入文件,以便它清楚。 – Praveen 2014-10-18 16:43:05

+1

*请*显示您的输入文件的样本。另外,如果可能的话,请直接从其中一个数据源文件复制并粘贴,而不是给出“类似这样的东西”的答案。我意识到个人信息可能很敏感,但如果你改变不同字母的字母和不同数字的数字,只要我们可以看到文件的基本布局就可以。没有它,几乎不可能提供帮助。 – Borodin 2014-10-18 18:26:10

回答

0

我会用glob替换您的opendir代码段。

E.g.

for my $filename (glob("$calls_dir/*.html")) { 
    open(my $filehandle, "<", $filename) or die $!; 
    while (<$filehandle>) { 
     # do stuff 
    } 
} 

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

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

+0

好吧,我得到了打印功能,按照你的建议,并宣布美元与循环。感谢那。 – tlialin 2014-10-19 16:37:47

相关问题