perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 30
Click for quality!




10.02.2012 / 08:53

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragDaten 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

Beitragre: Daten reduzieren in einer *.txt Datei (blutiger Anfänger)
Seitenanfang
ungetestet:
#! /usr/bin/perl

use 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

BeitragDanke 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

Beitragre: Danke renee
Seitenanfang
Was meinst Du mit Namen? Bis jetzt war nur von Zahlen die rede...

Datum: 08.01.2005-14:06

BeitragNamen
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

Beitragre: Daten reduzieren in einer *.txt Datei (blutiger Anfänger)
Seitenanfang
#! /usr/bin/perl

use 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

Beitragre: Daten reduzieren in einer *.txt Datei (blutiger Anfänger)
Seitenanfang
Ein kleiner Fehler ist mir unterlaufen

my ($path,$suffix) = $file =~ /(.*?)\.([^\.]+)$/;

muss

my ($path,$suffix) = $file =~ /(.*?)(\.[^\.]+)$/;
heißen

Datum: 11.01.2005-07:29

BeitragVielen Dank renee
Seitenanfang
Hi,

Vielen Dank, jetzt bin ich total zurfrieden. :-)
Gruß Joachim

Datum: 11.01.2005-22:17

-






-
-