2016-05-30 89 views
-1
#L_ENTRY <s_slash_1> 
#LEX  </> 
#ROOT  </> 
#POS  <sp> 
#SUBCAT  <slash> 
#S_LINK   <> 
#BITS <> 
#WEIGHT  <0.1> 
#SYNONYM  <0> 

#L_ENTRY <s_comma_1> 
#LEX  <,> 
#ROOT  <,> 
#POS  <sp> 
#SUBCAT  <comma> 
#S_LINK   <> 
#BITS <> 
#WEIGHT  <0.1> 
#SYNONYM  <0> 

#L_ENTRY <s_tilde_1> 
#LEX  <~> 
#ROOT  <~> 
#POS  <sp> 
#SUBCAT  <tilde> 
#S_LINK   <> 
#BITS <> 
#WEIGHT  <0.1> 
#SYNONYM  <0> 

#L_ENTRY <s_at_1> 
#LEX  <@> 
#ROOT  <@> 
#POS  <sp> 
#SUBCAT  <at> 
#S_LINK   <> 
#BITS <> 
#WEIGHT  <0.1> 
#SYNONYM  <0> 

以上是我的文本文件。我想将每行连接到一个数组的一个元素,直到出现'return'并继续加入下一行,直到出现另一个'return'。在上面的文字中,有三个返回值,所以我想要的是一个由四个元素组成的数组。如何在PERL中将多行连接到数组的一个元素中?

预先感谢您!

+0

您是否尝试过? – ssr1012

+0

是的,我有,我仍然试图找到一种方式.. –

回答

0

请试试这个:

use strict; 
use warnings; 

my $lines = ""; 
my @line; 
my $el = '1'; 
while(<DATA>) 
{ 
    if($_!~m/^$/i) { $lines .= "$_\n"; } 
    elsif($_=~m/^$/i) { 
     $lines=~s/\n{1,}/\n/g; 
    push(@line, "\n\n<array-$el>$lines</array-$el>"); $el++; $lines = ""; } 
} 

print @line; 
+0

@Borodin:好的,谢谢... – ssr1012

0

您可以逐行阅读您的文件。由于每条线都有#,因此有可能检查它是否为空。

看看这个:

my $yourFile = 'yourFile.txt'; 
open (my $data, '<', $yourFile) or die "Could not open $yourFile: $!"; 

my @output; 
my $i = 0; 
while(my $line = <$data>) { 
    if($line =~ /\#/){ 
    $output[$i] .= $line; 
    }else{ 
    $i++; 
    } 
} 

在这里,您逐行读取文件中的行。如果存在#,则在阵列位置$i中写入该行。否则,你增加$ i。

相关问题