Perl Noob! Fragen?!

Hi zusammen!

Also ich habe ein paar Fragen zu Perl:

Ich versuche es mir gerade selber beizubringen aber bin ins stocken geraten.
Aber vieleicht kann mir ja hier jemand helfen.

Da es einfach ist was zu verstehen hier mal das was ich machen möchte:

Ich habe eine Datei „Log“ und eine Datei „DB“ in diesen Dateien sind x Zeilen.
Wie bekomme ich folgendes hin:
Vergleich 1. Zeile mit allen Zeilen der Datei Log
Wenn nicht Identisch->
Auslesen der 1 Zeile
Umbennen einer Datei von xxx_0.mp3 nach Inhalt.mp3 von Zeile 1 der „Log“ Datei.
Wenn eine weitere Zeile vorhanden, solange bis alle nicht Identischen abgearbeitet sind.
Wenn eine Zeile Identisch ist soll diese gelöscht, die Zeilennummer gemerkt werden und die Entsprechende Datei xxx_x.mp3 ( _x Entspricht der Zeilennummer der „Log“ Datei)gelöscht werden.
Anschliesend alle Zeilen von „Log“ an Datei „DB“ anhängen.

Und:
Verschieben von allen Dateien die nicht xxx_x.mp3 sind in ein Verzeichnis.

Ich weiss das es Total chaotisch ist aber ich habe erst heute angefangen es zu lernen und jeder hat mal klein angefangen, also bitte nicht schimpfen!
Hier der Quellcode mit dem ich rumgetestet habe:
Das ganze findet unter Linux statt wenn es eine Rolle spielen sollte.

code:
#!/usr/bin/perl -w

#wegschreiben in Datei DB
#open(DATEI,">>/Test/DB"); # oeffne Datei zum Anhaengen
#print DATEI „$text“; # in die Datei schreiben
#close(DATEI);

my $alt;
opendir(DIR,"/mp3");
my @alt = readdir (DIR);
closedir(DIR);
print „@alt\n“;

my $neu;
open (DATEI,„Log“) || die „Kann Datei nicht finden!“;
read (DATEI, $neu, 5);
#30
print „$neu\n“;
chdir("/mp3");
foreach $alt (@alt) {
if ($alt =~ /^xxx/) {
rename ($alt,$neu.".mp3");
}
}

my $umbennant;
#40
opendir(DIR,"/mp3");
my @umbennant = readdir (DIR);
closedir(DIR);
print „@umbennant\n“;

#File::Copy

chdir("/mp3");
mkdir „fertig“,0777;
#50
#opendir (DIR,"/mp3");
#my @fertige = readdir (DIR);
#if (my $fertige =~ /mp3$/); #wie bekomme ich nur die umbennanten Dateien Kopiert
#copy ("$fertige", „/fertig“);

#rename ($alt,$neu);
#print „Datei $alt in $neu umbennant\n“;
#60
#closedir(DIR);

Vielen Dank

Christian

Hallo,

erst mal was Grundsätzliches.

Wenn du folgendes Buch noch nicht hast

http://www.oreilly.de/catalog/einperl3ger/

dann schau dir mal an ob es was für dich ist.

Ansonsten kann ich nur empfehlen dir das
http://www.oreilly.de/catalog/pperl3ger/
zuzulegen und durchzulesen.

Für den Schnell einstiegt solltest du dir das Kochbuch
http://www.oreilly.de/catalog/perlckbk2ger/
zulegen

Lese die Einführung der jeweiligen Kaptiel und bei bedarf schauts du in „Programmieren mit Perl“ nach.

Wichtig: Gehe nach dem Grundsatz vor.

„Nutze Rezepte nur wenn du in der Lage bist sie zu verstehen, ansonsten lernst du nämlich nichts“

Ein paar Tips zu deinem Quell Text.

Alles anderen Fragen beantworten sich IMHO wenn du das Kochbuch gelesen hast.

code:
#!/usr/bin/perl -w

use strict; # Sollte immer genutzt werden
use warnings; # Das selbe wie „-w“, ich schalte warnings aber lieber so ein.

#wegschreiben in Datei DB
#open(DATEI,">>/Test/DB"); # oeffne Datei zum

Verwende nie open in der 2 Parameter variante, nutze immer die 3 Parameter variante.
my $file = ‚/Test/DB‘;
open(DATEI,’>>’,$file) or die „Can’t open $file: $!“;

foreach $alt (@alt) {

Viele Perlprogrammierer nutzen „foreach my $alt (@alt)“
Dann brauchts du die var $alt nicht extra definieren.

cu polarix

Hi,

#wegschreiben in Datei DB
#open(DATEI,">>/Test/DB"); # oeffne Datei zum

Verwende nie open in der 2 Parameter variante, nutze immer die
3 Parameter variante.
my $file = ‚/Test/DB‘;
open(DATEI,’>>’,$file) or die „Can’t open $file: $!“;

Was ist evil an der 2-Parametervariante?

Ciao
Kaj

Hallo,

Was ist evil an der 2-Parametervariante?

Sie ist nicht ganz eindeutig. Stell dir vor es gibt in dem Verzeichnis 2 Dateien:

file
>file

Wenn du jetzt open(IN, ‚>>file‘) machst, öffnet das jetzt die erste Datei im append-Modus oder die zweite im write-Modus?

Grüße,
Moritz

1 Like

Wenn du jetzt open(IN, ‚>>file‘) machst, öffnet das
jetzt die erste Datei im append-Modus oder die zweite im
write-Modus?

Ok, klingt einleuchtend. Man muss natürlich mit einer derartigen Dateibenamung rechnen, leider :frowning:

Ciao
Kaj

Hallo,

Ok, klingt einleuchtend. Man muss natürlich mit einer
derartigen Dateibenamung rechnen, leider :frowning:

ja. Zu sowas ähnlichem gibts noch ein Zitat von Larry Wall:

Just don’t create a file called -rf. :smile:
– Larry Wall in

Grüße,
Moritz