2016-05-30 5 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> 

上記は私のテキストファイルです。私は配列の1つの要素に各行を結合して、 'return'があり、次の行が他の 'return'になるまで結合し続けたいと思います。上記のテキストには3つのリターンがあるので、私が望むのは4つの要素の配列です。PERLの配列の1つの要素に複数の行を結合するにはどうすればよいですか?

ありがとうございます!

+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

@Bodod:Okありがとう... – ssr1012

0

ファイルを1行ずつ読むだけで済みます。 #で始まるすべての行が空であるかどうかをチェックする可能性があります。この時

ルック:ここ

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をインクリメントします。

関連する問題