2013-02-19 70 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

相关问题