如何在PERL中将多行连接到数组的一个元素中?
问题描述:
#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中将多行连接到数组的一个元素中?
预先感谢您!
答
请试试这个:
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
答
您可以逐行阅读您的文件。由于每条线都有#
,因此有可能检查它是否为空。
看看这个:
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。
您是否尝试过? – ssr1012
是的,我有,我仍然试图找到一种方式.. –