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

Oben ist meine Textdatei. Ich möchte jede Zeile zu einem Element eines Arrays verbinden, bis es eine "Rückkehr" gibt und weiterhin den nächsten Zeilen beitreten, bis es eine andere "Rückkehr" gibt. Im obigen Text gibt es drei Returns, also möchte ich ein Array von vier Elementen haben.Wie verbinde ich mehrere Zeilen in einem Element eines Arrays in PERL?

Vielen Dank im Voraus!

+0

Haben Sie versucht? – ssr1012

+0

ja ich habe und ich versuche immer noch einen Weg zu finden .. –

Antwort

0

Bitte versuchen Sie dies:

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: Ok Danke ... – ssr1012

0

Sie können Ihre Datei Zeile für Zeile lesen. Da jede Zeile mit einer # beginnt, besteht die Möglichkeit zu prüfen, ob sie leer ist oder nicht.

Blick auf diese:

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++; 
    } 
} 

Hier lesen Sie die Datei Zeile für Zeile. Wenn es eine # gibt, schreiben Sie die Zeile in die Array-Position $i. Andernfalls erhöhen Sie $ i.

Verwandte Themen