2017-01-31 7 views
0

ich eine Textdatei haben, die Daten des Formulars hat ..Extrahieren von Zahlen aus einer Textdatei mit Perl

***** yz = 1,4333 ******

result = 3.58e-01


******* ayf = 25.00 **** yz = 1,34
result = 3.24e-01


Ich möchte die Werte neben Ergebnis extrahieren & es in ein Array schieben.

+0

Wollen Sie diese '3.58e-01 'als Wert, denn wenn Sie' bearbeiten if ($ _ = ~/Ergebnis = (\ d + \ d + e. \ d +) /) {'zu' if ($ _ = ~/Ergebnis = (\ d +. \ d + e- \ d +) /) {', Dies wird nur die oben beschriebene Ausgabe erfassen. Bitte bearbeiten Sie Ihre Frage mit weiteren Details. – AbhiNickz

+0

@AbhiNickz: Ich habe weitere Details hinzugefügt. – rahdirs

+0

Versuchen Sie, Ihren Dateinamen als "output_vth _" zu geben. $ Vth. ". Txt" – Jaison

Antwort

0

Gibt es mehr Code, den Sie im Beispiel nicht angegeben haben? Wie Ausgabe des Ergebnisarrays? Ansonsten gibt es einige Dinge zu beachten:

  • in regex führenden Raum: Dies wird nicht Ihr Beispiel passen, da result dort am Anfang der Zeile beginnt. Im Allgemeinen, wenn Sie mit möglicherweise auftretenden Räumen flexibler sein möchten, fügen Sie \s* an den entsprechenden Stellen ein.
  • wissenschaftliche Nummer Übereinstimmung: Wenn Sie andere Zahlen als wissenschaftliche Notation mit negativen Exponenten erwarten, müssen Sie Ihre Regex so übernehmen. Es gibt viele Beispiele da draußen.

Für Ihren erweiterten Code:

  • benutzen Sie bitte use strict; und use warnings; in jedem Skript
  • verwenden, um den 3-Argument-Modus von open und möglicherweise lexikalischen Datei-Handler (my $fh statt FH). Der 3-Argument-Modus stellt sicher, dass Sie nicht vergessen, unter anderem den tatsächlichen Modus (Lesen/Schreiben/etc.) Anzugeben, unter dem die Datei geöffnet werden soll.
  • close(FH) Ihre Datei-Handler, bevor sie auf anderen Dateien

nicht schließen IN2 ein Problem zu sein in Ihrem Code scheint, zum Beispiel unter Verwendung.

+0

Ich habe weiteren Code hinzugefügt – rahdirs

+1

Verwenden Sie 'use strict;' und 'use warnings;' in all Ihren Skripten - das hilft wirklich viel. Versuchen Sie dann im 3-Argument-Modus zu öffnen - so vergessen Sie nicht zu spezifizieren, wenn Sie es zum Lesen oder Schreiben öffnen. Und 'schließen' Sie alle Dateigriffe, die Sie nicht mehr benötigen, besonders wenn Sie sie erneut verwenden.Ich sehe kein Schließen des Griffs 'IN2', bevor Sie versuchen, es erneut zu öffnen. Und Sie öffnen es ohne Angabe, ob für die Eingabe oder Ausgabe ... – SREagle

0

Dies könnte funktionieren:

open my $fh, '<', $filename or die; 
my @array; 
/result\s*=\s*(\S+)/i and push @array, 0+$1 while <$fh>; # 0+$1 or just $1 
close $fh; 
Verwandte Themen