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



#!/COMMUNITY

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




10.02.2012 / 21:00

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


BeitragAuswertung Testfile mit Dateiendungen
Seitenanfang
Hallo zusammen,

ich habe ein Textfile vorliegen (1.4 GB), in welchem alle möglichen Infos zu ~7800000 Dateien drinstehen, unter anderem auch die Dateiendung.

Nun möchte ich eine Übersicht über die Dateiendungen erhalten, á la:

EXE: 200000
DAT: 123455
HTML: 1234444
.
.
.

Wie kann ich das bewerkstelligen?

Gruß, Moritz

Datum: 07.11.2005-09:37

Beitragre: Auswertung Testfile mit Dateiendungen
Seitenanfang
Wie ist die Datei aufgebaut?

Datum: 07.11.2005-11:39

Beitragre: Auswertung Testfile mit Dateiendungen
Seitenanfang
Ich bin schon soweit, dass ich die Datei zeilenweise durchgehe und die Endung in jedem Durchgang in eine Variable schreibe.

Nun ist die Frage, wie ich dann weitermache:

#!/usr/bin/perl

open(DAT, "<alles.txt") || die "Datei nicht gefunden\n";
while(<DAT>)
{
my @array = split(/ /, $_);
$typ = @array[1];
}
close(DAT);

In $typ steht die Endung.

Datum: 07.11.2005-12:04

Beitragre: Auswertung Testfile mit Dateiendungen
Seitenanfang
Hm, kennst du File::Basename?
Da kannst du mittels fileparse schön komfortabel die Dateiendungen auslesen.
Zum Speichern deiner Ergebnisse würde ich dir Config::General oder DB_SDBM empfehlen. Die Module sind leicht zu handhaben und bei letzterem kannst du sogar deine Ergebnisse gemütlich in einen Hash schreiben.

Datum: 07.11.2005-19:00

Beitragre: Auswertung Testfile mit Dateiendungen
Seitenanfang
Hi,

auch Dir vielen Dank für deine Antwort, leider stehe ich erst in den Anfängen von Perl, ich habe das nur für die Auswertung dieses Textfiles gebraucht und dabei wird es wohl auch vorerst bleiben. Normal scripte ich immer mit VBS, aber das ist im Vergleich so stinkelahm^^.

Deswegen kann ich nicht soviel mit deiner Antwort anfangen, aber trotzdem vielen Dank für deine Mühe!

Grüße, Moritz

Datum: 08.11.2005-16:24

Beitragre: Auswertung Testfile mit Dateiendungen
Seitenanfang
OK, hier ist ein Schnipselchen zum Speichern in eine Datei mit DB_SDBM:

my $anzahl_exedateien = 10;
my $db = 'c:/verz/file.db';
my %h = (); # Hash als Datenbank verwenden (so in etwa)
tie(%h, 'SDBM_File', $db, O_RDWR|O_CREAT, 0666)
or die "Couldn't tie SDBM file '$db': $!; aborting";

my %copy = %h; % eine Kopie der DB anlegen, falls du später ncoh was damit machen willst. %h wird später wieder geleert

$h{"exe"} = $anzahl_exedateien; # Die Anzahl der exe-Dateien wird jetzt in die Datei geschrieben. Später kannst du mit $h{"exe"} wieder darauf zugreifen.

untie %h; # Datanbank schließen (sozusagen)
# %h ist jetzt leer

So legst du dir eine kleine DB an, mit der du komfortabel arbeiten kannst. Du hast nämlich Zugriff auf die DB indem du einfach auf %h zugreifst.
Damit kannst du schnell deine Daten speichern und auch wieder auslesen.
In der Dokumenation zum Modul findest du weitere Beispiele.

Und jetzt noch zu File::Basename:


use FIle::Basename qw(fileparse); # nimm die Methode fileparse aus dem Modul
my @endungen = qw(.exe .pl .vbs .png);
my ($name,$path,$endung) = fileparse($fullname,@endungen);

Der Vorteil bei Modulen ist halt, dass du nicht alles selber coden musst (z.B. open(DAT...), sondern vorgefertigte Codestücke die i.d.R. auch gut, robust und performant sind benutzen kannst. Und wenn du später mal ein ähnliches Programm brauchst kannst du die Sachen auch schneller aus deinen bisherigen Codes herleiten, weil die Grundfunktionalität gar nicht von dir selber stammt sondern immer exakt gleich im Modul vorliegt.

Bei weiteren Fragen einfach hier posten.

Datum: 08.11.2005-17:43

Beitragre: Auswertung Testfile mit Dateiendungen
Seitenanfang
kannst Du ein paar Zeilen des großen files posten, ansonsten können wir Dir leider nicht richtig helfen.

Aber ein Tip: sowas macht man mit nem Hash.

Gruss,
svenXY

Datum: 07.11.2005-11:42

Beitragre: Auswertung Testfile mit Dateiendungen
Seitenanfang
Ich bin schon soweit, dass ich die Datei zeilenweise durchgehe und die Endung in jedem Durchgang in eine Variable schreibe.

Nun ist die Frage, wie ich dann weitermache:

#!/usr/bin/perl

open(DAT, "<alles.txt") || die "Datei nicht gefunden\n";
while(<DAT>)
{
my @array = split(/ /, $_);
$typ = @array[1];
}
close(DAT);

In $typ steht die Endung.

Datum: 07.11.2005-12:04

Beitragre: Auswertung Testfile mit Dateiendungen
Seitenanfang

#!/usr/bin/perl -w

use strict; # immer gut!

my %types; # hash fr die Endungen

open(DAT, "<alles.txt") || die "Datei nicht gefunden\n";
while(<DAT>){
my @array = split(/ /, $_);
$typ = @array[1];
$types{$typ}++; # Der Typ ist der Index im assotiativen Array, die Anzahl ist der Wert und der wird einfach jedesmal um 1 hochgezhlt
}
close(DAT);

### Ausgabe:
foreach my $suffix (sort keys %types) {
print "$suffix kommt $types{$suffix} mal vor\n";
}


gruss,
svenXY

Datum: 07.11.2005-12:27

Beitragre: Auswertung Testfile mit Dateiendungen
Seitenanfang
und noch ein kleiner Fehler:
die Zeile muss

my $typ = $array[1];

heissen. Auf Array Elemente greift man mittels $array[...] zu, nicht mit @array[...] - ein gern gemachter Fehler.

Wenn Du use strict; und use warnings; benutzt, wird Perl Dir das freundlicherweise mitteilen. Hilft ungemein.

Datum: 07.11.2005-12:41

Beitragre: Auswertung Testfile mit Dateiendungen
Seitenanfang
Fein,

vielen Dank für die schnelle Hilfe, hat sehr geholfen!

Grüße, Moritz

Datum: 07.11.2005-12:58

-






-
-