#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'。在上面的文本中,有三个返回,所以我想要的是一个包含四个元素的数组。
提前谢谢!
答案 0 :(得分: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。
答案 1 :(得分:-1)
请试试这个:
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;