|
|
 |

|

 |

| Community » Perl: Allgemeines Forum |
|
Daten reduzieren in einer *.txt Datei (blutiger Anfänger)
|
Seitenanfang |
Hallo zusammen, Ich habe folgendes Problem: Ich habe *.txt Dateien, die eine Matrix von Zahlen enthält (Spalten 1000 : Zeilen 5000). Das ist zu viel um es in Excel auszuwerten, was ich aber machen will. Deshalb möchte ich die Daten Reduzieren und zwar so, dass in der einer neuen Text-Datei nur noch jede 5. Zeile und jede 5. Spalte steht. Ich habe es schon in VB versucht, aber das geht schief, ich habe gehört PERL soll da das ultimative Hilfsmittel sein. Leider habe ich noch nie mit Perl gearbeitet und deshalb hier die Anfrage, geht es einfach und wie fange ich am Besten an? Aufbau der *.txt Datei: - erste Zeile = leer - jede Zeile beginnt dann mit einer Zahl - Zahlen unterschiedlich lang - Zahlen getrennt durch 'Leerzeichen' - Ende einer Zeile 'Leerzeichen Enter' - Dezimaltrennzeichen '.' - 1000er-Trennzeichen ',' Also wenn mir jemand helfen kann wäre ich echt begeistert. Vielen Dank schon mal im Vorraus und noch ein schönes Wocheende. Gruß Joachim
Datum: 08.01.2005-12:55

|
re: Daten reduzieren in einer *.txt Datei (blutiger Anfänger)
|
Seitenanfang |
ungetestet:#! /usr/bin/perluse strict; use warnings; my $file = '/path/to/file.txt'; # Deine Ursprungsdatei my $outfile = '/path/to/result.file'; # Deine Ausgabedatei open(OUT,">$outfile") or die $!; # öffne Ausgabedatei zum schreiben open(IN,"<$file") or die $!; # öffne $file zum lesen # solange Zeilen eingelesen werden while(my $line = <IN>){ # überspringe die Zeile, wenn es keine 5. Zeile ist next if(!(($. - 1) % 5 == 0) || $. == 1); # teile die Zeile in die einzelnen Spalten my @cols = split(/ /,$line); # jede 5. Spalte for(my $i = 4; $i < scalar(@cols); $i += 5){ print OUT $cols[$i]," "; } print OUT "\n"; } close IN; close OUT;
Datum: 08.01.2005-13:37

|
Danke renee
|
Seitenanfang |
Danke, Frage gibt es hier auch eine Möglichkeit die Namen bei jedem Durchlauf des Programms abzufragen? Gruß Joachim
Datum: 08.01.2005-13:59

|
re: Danke renee
|
Seitenanfang |
| Was meinst Du mit Namen? Bis jetzt war nur von Zahlen die rede...
Datum: 08.01.2005-14:06

|
Namen
|
Seitenanfang |
Hi Renee, erst einmal vielen Dank für dein Programm funktioniert echt super, nachdem ich es geschafft habe meinem Windows zu sagen, wie es perl aufrufen soll, klappt jetzt alles!Das mit dem Namen so, ich muß das Programm auf mehrere Dateien anwenden und damit ich nicht immer das Programm ändern muß dachte ich an eine Art Eingabe-Box in der ich den Pfad der zu reduzierenden Datei eingebe und er dann die Datei öffnet und automatisch unter dem Dateinamen: 'alterDateiname, red.txt' wieder abspeichert. Aber ich bin so schon super zufrieden. Danke dir für deine schnelle Hilfe
Datum: 10.01.2005-21:44

|
re: Daten reduzieren in einer *.txt Datei (blutiger Anfänger)
|
Seitenanfang |
#! /usr/bin/perluse strict; use warnings; use Getopt::Long; my @files; GetOptions('-i=s' => \@files); foreach my $file(@files){ my ($path,$suffix) = $file =~ /(.*?)\.([^\.]+)$/; my $outfile = $path.'.red'.$suffix; # Deine Ausgabedatei open(OUT,">$outfile") or die $!; # öffne Ausgabedatei zum schreiben open(IN,"<$file") or die $!; # öffne $file zum lesen # solange Zeilen eingelesen werden while(my $line = <IN>){ # überspringe die Zeile, wenn es keine 5. Zeile ist next if(!(($. - 1) % 5 == 0) || $. == 1); # teile die Zeile in die einzelnen Spalten my @cols = split(/ /,$line); # jede 5. Spalte for(my $i = 4; $i < scalar(@cols); $i += 5){ print OUT $cols[$i]," "; } print OUT "\n"; } close IN; close OUT; }
Aufruf Programm: Beispiele: skript.pl -i /path/to/file.one -i /homes/test.dat für jede Datei, die Du bearbeiten willst, musst Du den Pfad mit -i angeben...
Datum: 11.01.2005-07:28

|
re: Daten reduzieren in einer *.txt Datei (blutiger Anfänger)
|
Seitenanfang |
Ein kleiner Fehler ist mir unterlaufenmy ($path,$suffix) = $file =~ /(.*?)\.([^\.]+)$/; muss my ($path,$suffix) = $file =~ /(.*?)(\.[^\.]+)$/; heißen
Datum: 11.01.2005-07:29

|
Vielen Dank renee
|
Seitenanfang |
| Hi, Vielen Dank, jetzt bin ich total zurfrieden. :-) Gruß Joachim
Datum: 11.01.2005-22:17

|
|

|

|

|
 |

|

|
|