2013-02-19 73 views
0

我有問題,這部分我的代碼COSE:如何將每行添加到txt文件中的單行Perl?

foreach my $line(keys %results){ 
    print Dump($post) if $results{$line} == 1; 
} 

我需要它只是一個時間打印「打印轉儲($ POST)」

這裏是所有部分

my $f1 = "/home/shaman/Desktop/data.txt"; 
my $f2 = "/home/shaman/Desktop/ini.txt"; 


my %results =(); 
open FILE1, "$f1" or die "Could not open file: $! \n"; 

while(my $line = <FILE1>){ 
    $results{$line}=1; 
} 
close(FILE1); 


open FILE2, "$f2" or die "Could not open file: $! \n"; 
while(my $line =<FILE2>) { 
    $results{$line}++; 
} 
close(FILE2); 

foreach my $line(keys %results){ 
    print Dump($post) if $results{$line} == 1; 
} 

$帖子包含同樣喜歡它行,但哈希我得到randomed行,如果我打印一行一行的COSE ...

如果我運行代碼,它將repat印刷後4-5 TI MES它取決於線路有多少在它後(線來dinamicly),但我需要後進行打印只是一個時間......

+2

你目前有什麼問題? – 2013-02-19 13:02:29

+0

您正在嘗試查找'data.txt'中的行,而不是'ini.txt'中的行,對嗎? – simbabque 2013-02-19 13:03:19

+4

你還沒有分配任何東西給你正在傾銷的變量'$ post'。因此,如果您按原樣運行此代碼,它將只打印一堆空的(未定義的)行。 – TLP 2013-02-19 13:12:49

回答

1

如何:

my $dump_done = 0; 
foreach my $line(keys %results){ 
    if ($results{$line} == 1 and !$dump_done) { 
     print Dump($post); 
     $dump_done = 1; 
    } 
} 
+0

謝謝隊友!它的工作 – Hellena 2013-02-19 13:40:24

1

這聽起來像你想只打印一次,只要你的結果至少有一行等於一行。

如果這是正確的,你可以讓這個簡單的修改代碼:

foreach my $line(keys %results){ 
    if ($results{$line} == 1) 
    { 
      print Dump($post); 
      last; 
    } 
} 

這會盡快退出循環,你找到一個匹配。

如果因爲其他原因需要完成整個循環,請使用M42的解決方案。

+0

這也是正確的,謝謝! – Hellena 2013-02-19 13:46:52

相關問題