2017-03-27 4 views
0

Meine Frage bezieht sich auf die Extraktion von Daten aus einer Datei in Perl. In der angehängten Datei gibt es das Standardformat der Netzliste. Nach dem Ausführen des Programms habe ich die Elemente in ein Array @name_gate, aber wenn ich versucht, print @name_gate[0] anstelle des ersten Elements, habe ich die gesamte erste Spalte, ähnlich für @name_gate[1], die zweite Spalte.Datenextraktion von Netzliste Zeile für Zeile mit Perl

Also das Problem ist, ich habe wieder eine Zeichenfolge in @name_gate[0], die ich Element für Element zugreifen möchte.

my @ind; 
my $index=0; 
my $file = 'netlist.txt'; 
my $count=0; 
my @name_gate; 
open my $fh,'<',$file or die "could not open the file '$file' $!"; 

while (my $line = <$fh>) 
    { 
     chomp $line; 
     @name_gate = split (/ /,$line); #transforming string into arrays 

     print "@name_gate[0]"; 
    } 

Der obige Code druckt die gesamte Spalte 1 2 3 4 bis 14. Wie kann ich ein einzelnes Element, wie 1 oder 2 oder 14 usw. extrahieren Hier wird die aktuelle output

+2

erstes Element ein Skalar '$ name_gate versuchen [0]' – salparadise

+0

hat immer 'Verwendung Warnungen; 'und' verwenden Sie strict; 'am Anfang aller Programme. Mit Warnungen auf Sie würde 'Skalar Wert @ary [0] besser als $ ary [0] um geschrieben werden ...' – zdim

+0

Nein, es druckt das gleiche wie vor allen Elementen der 1. Spalte. – Blackwind

Antwort

3

@name_gate[0] ist kein Hauptproblem. Denn mit Warnungen (Scalar value @ary[0] better written as $ary[0] at) wird es das Ergebnis geben.

Ich dachte, Ihr Problem ist in split. Weil Ihre Eingabedatei mehrere Leerzeichen oder Tabs getrennt hat. Geben Sie also bitte \s+ oder besser \t ein. Du wirst das Ergebnis bekommen.

Dann legte immer Verwendung Warnungen und use strict in Anfang des Programms,

while (my $line = <$fh>) 
{ 
    chomp $line; 

     #my @name_gate = split (/ /,$line); #transforming string into arrays 

     my @name_gate = split (/\s+/,$line); 

     #print "@name_gate[0]\n"; 

     print "$name_gate[0]\n"; 

}