如何在PERL中将多行连接到数组的一个元素中?

时间:2016-05-30 12:05:46

标签: 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'。在上面的文本中,有三个返回,所以我想要的是一个包含四个元素的数组。

提前谢谢!

2 个答案:

答案 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;