2014-10-18 37 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

相關問題