2015-05-19 47 views
-2

我處於編寫任務算法的困難境地。我在這裏問的每個問題我都在學習一些新東西,並且非常感謝。如何在Perl中編寫算法以從兩個文件中讀取數據匹配並打印查詢

我必須讀取一個文本文件(一個表包含一個ID和一個名稱),我必須將它們與另一個具有相同ID和名稱的文件進行匹配。

我想在Perl中編寫一個程序來打印出與第一個表和第二個表匹配的結果,並只打印匹配的ID,名稱,子標識和日期(第二個表中的最後兩個字段) 。

任何人都可以幫我解決這個問題嗎?

這就是我已經試過的。

#!/bin/env perl 

use strict; 
use warnings; 
use autodie; 

use Data::Dumper; 

# Create a file handle for the input file 
my $fname = 'secondtable.txt'; 
open(my $fh, '<:encoding(UTF-8)', $fname); 

# print header 
my $cname = readline $fh; 
print $cname; 

# # print rows 
while (my $line = readline $fh) { 
    chomp $line; 
    print "$line\n"; 
} 
+2

這是不精確的問題說明。如果你更謹慎地解釋,你更有可能得到一個有用的答案。示例數據將允許人們給你一個工作解決方案。 SO的規則要求你解釋你所嘗試過的。 – Gene

+2

歡迎來到Stack Overflow。請儘快閱讀[關於]頁面。它聽起來很直截了當,就你已經解釋的程度而言。讀取第一個文件並將信息存儲在某種哈希表中。閱讀第二個文件,當識別信息匹配時,打印該行。告訴我們你的代碼,我們可以提供更多幫助;在那之前,我們沒有太多可以(或者將會)爲​​你做 - 我們通常不會從頭開始編寫代碼,但我們一定會幫助您解決一個誠實的嘗試來解決您的問題。 (不要忘記'嚴格使用;使用警告;') –

+0

對不起,我在編寫評論時正在研究算法。這是我的嘗試,我設法讀取第二個表,但不知道如何做第二個:#!/ bin/env perl '' – marko

回答

0
use warnings; 
use strict; 

open my $file1, '<', 'in1.txt' or die $!; 
open my $file2, '<', 'in2.txt' or die $!; 

my %data1; 
while(<$file1>){ 
    chomp; 
    next if /^name/; 
    my @split = split(/\t/); 
    $data1{$split[0]}{$split[1]}++; 
} 

my %data2; 
while(<$file2>){ 
    chomp; 
    next if /^name/; 
    my @split = split(/\t/); 
    $data2{$split[0]}{$split[1]}++; 
    print "$split[0]\t$split[1]\n" if $data1{$split[0]}{$split[1]}; 
} 

--- --- IN1

name id 
foo 1 
bar 2 
baz 3 
other 4 

--- --- IN2

name id 
bar 1 
baz 2 
baz 3 
other 4 
+0

感謝您的幫助。 – marko

相關問題