Perl Problem

villiboy

villiboy

Mitglied
Hi Leute,
ich möchte in Perl eine Datei neu anlegen und in diese schreiben z.B. ein Adressbuch. Doch leider gibt es schon probleme beim anlegen der Datei.
Hier der Code:

#!/usr/bin/perl
sysopen(IN,"meineDatei.txt",O_CREATE) or die "Fehler beim öffnen der Datei\n$!";
while(<IN>) {
print "Jetzt möchte ich in die Datei schreiben\n";
}
close(IN)

Wäre nett, wenn mir da wer helfen könnte!!

Danke

Nachtrag: Kann es sein, wenn ich es so mache: open(DATEI,">meineDatei.txt") das es mir dann die Datei anlegt, wenn sie nicht vorhanden ist?
 
Zuletzt bearbeitet:
Code:
open(FOO, ">myfile.txt");
print FOO "Ich schreibe in die Datei!";
close(FOO);
bling :).

Nachtrag: Kann es sein, wenn ich es so mache: open(DATEI,">meineDatei.txt") das es mir dann die Datei anlegt, wenn sie nicht vorhanden ist?
ja, wenn die Datei nicht vorhanden ist, wird sie erstellt. Ist die Datei bereits vorhanden, wird sie überschrieben.
Mit open(FOO, ">>bla.txt"); hängst du Inhalt an die Datei ran.
 
sorry, hab ich ganz verpeilt.....
aber jetzt mal was zu perl...

also ich habe folgendes programm:

#!/usr/bin/perl
open(DATEI,">>meineDatei.txt") or die "Fehler beim öffnen der Datei\n$!";
print "Bitte geben Sie den Namen, Straße, Plz und Geburtstag, getrennt durch Kommata ein:\n";
$Eingabe = <STDIN>
@AdressListe = split(/,/,$Eingabe);
for(@AdressListe){
print DATEI "@AdressListe";
}
close(DATEI)


Dieses Perl-script soll mir eine adressdatei anlegen und nach straße, name oder plz sortieren. wie mache ich das? bzw. mir gibt es einen eintrag immer mehrmals in die datei aus, woran liegt das? ich möchte immer einen eintrag nach dem anderen eingeben, hiillffeeeee!!

danke
 
meine perl-erfahrungen sind schon ne weile her, aber so klappt das nicht!

1. du verwendest weder

a) use strict
b) use warnings

wenn du diese beiden pragmas verwendest wirst du 99 % deiner fehler selber finden!

for(@AdressListe){
print DATEI "@AdressListe";
}

afaik kannst du nicht direkt ein array in eine datei schreiben, wenn dann:

Code:
for $_ (@array) {
print DATEI $_;
}

und warum splittest du erst den string in ein array und dann das array wieder in einzelne string-tokens?
dann kannst du auch gleich einfach den ganzen string in die datei schreiben und halt vorher mit

s///

die kommas entfernen....
 
Du schreibst für jedes Listenelement die volle Liste in die Datei. Besser ist:

Code:
#!/usr/bin/perl
open(DATEI,">>meineDatei.txt") or die "Fehler beim öffnen der Datei\n$!";
print "Bitte geben Sie den Namen, Straße, Plz und Geburtstag, getrennt durch Kommata ein:\n";
$Eingabe = <STDIN>;
@AdressListe = split(/,/,$Eingabe);
for(@AdressListe){
	print DATEI $_;
}
close(DATEI)
 
ok, jetzt fügt es mir noch einen eintrag, wie es auch soll hinzu! aber wie kann ich eine abfrage machen, ob noch weitere einträge vorgenommen werden möchten oder keine mehr? und dann das prog beendet?
und das mit dem sortieren klappt auch nur nach dem ersten element, kann ich nicht sagen, dass ich nach einem bestimmten element wie z.b die plz sortieren will?

danke
 
Du kannst es mit einer do-while-Schleife tun, in etwa wie

Code:
...
do {
  lese daten
  schreibe daten
  ...
  frage: weitermachen j/n
  lese $answer
} while (test $answer=="j")
...

Bezüglich Deiner sort-Frage würde ich Dir empfehlen, Dir mal Hashs anzuschauen.
 
villiboy: mmhja, hier fehlen aber alle Basics, die es gibt oder ? :)...macht aber nichts. Es gibt tonnenweise netter Perlbücher und wenn du clever bist, hast du Perl verdammt schnell "drin" :).
 
ja ich bin anfänger und hab da so ein aufgabenbaltt bekommen mit dem ich anfangen soll aber wie gesagt, über jede hilfe bin ich froh!!
werde mir auch bald ein buch zulegen und bis dahin auf euere unterstützung hoffen, danke!!
ich habe schon festgestellt, dass man da sehr schell reinkommt, aber das sortieren ist immer noch ein prob!!
 
Zuletzt bearbeitet:
villiboy schrieb:
ja ich bin anfänger und hab da so ein aufgabenbaltt bekommen mit dem ich anfangen soll aber wie gesagt, über jede hilfe bin ich froh!!
werde mir auch bald ein buch zulegen und bis dahin auf euere unterstützung hoffen, danke!!
ich habe schon festgestellt, dass man da sehr schell reinkommt, aber das sortieren ist immer noch ein prob!!

Hallo
Nein, du bist nicht auf unsere Hilfe angewiesen, denn es gibt
perldoc -f FUNKTIONSNAME
Außerdem gibt es auf http://www.perl.org/ die komplette Hilfe nebst Tuorial und FAQ zu fast jedem Thema.
Ausführlicher geht es nicht.

Gruß Wolfgang
 
danke wolfgang, hab mich jetzt ein paar stunden geqäult und bin auf folgendes, fast funktionierendes programm gekommen. leider komme ich aus der schleife nicht mehr raus und dieses problem bekomme ich nicht hin.
es wäre nett, wenn ihr mir sagen könnten was ich da noch falsch mache! danke

#!/usr/bin/perl
use warnings;
do{
open(DATEI,">>meineDatei.txt") or die "Fehler beim öffnen der Datei\n$!";

print "Bitte geben Sie den Namen, Straße, Plz und Geburtstag, getrennt durch Kommata ein:\n";

$Eingabe = <STDIN>;
chomp $Eingabe;

@AdressListe = split(/,/,$Eingabe);
for(@AdressListe){
print DATEI $_;
}
print DATEI "\n";
if($Eingabe eq "fin"){last} # hiermit wollte ich die schleife beenden ...
}while($Eingabe);
close(DATEI);
print "Programm beendet, Tschuess\n";
 
schau doch mal, was suprsucker für dich geschrieben hat:
a) use strict
b) use warnings
du benutzt aber nur warnings ! use strict ist viel wichtiger, da es auf schwerwiegende Dinge hinweist bzw. abbricht.
Was du da schreibst ist unter aller Sau :).
 
schreib unter "use warnings;" noch ein "use strict;" :)...dann siehst du automatisch, dass es unter aller Sau ist :). Immer dran denken: man kann nur dazulernen, ich will dich nicht beleidigen oder so, aber "use strict;" hilft ungemein Fehler schon sehr früh zu entdecken.
 
avaurus schrieb:
schau doch mal, was suprsucker für dich geschrieben hat:

du benutzt aber nur warnings ! use strict ist viel wichtiger, da es auf schwerwiegende Dinge hinweist bzw. abbricht.
Was du da schreibst ist unter aller Sau :).

Wahrscheinlich hagelts bei "#use strict" nur Fehlermeldungen, da ist es doch besser ohne "#use strict" ;)
Erinnert mich irgendwie an den Opa, der von seinem Virenscanner immer gewarnt wird, dass sein System befallen ist. Nachdem er den Scanner ausgeschaltet hat, gabs keine störenden Meldungen mehr, ergo kein Virus :devil:

@villiboy:

Du musst die Schleifenabbruchsbedingung mit while () abfragen. Nur sone Frage: Kennst Du eigentlich den Sinn von do-while?
 
ja das habe ich auch nicht so aufgefasst, aber etwas genauere erläuterungen wären nicht schlecht *gg*:think:
so jetzt habe ich mal alle fehler ausgebesser, waren aber nicht soviele wie ich erwartet habe *lol*
danke für den guten tipp ...
 
Zuletzt bearbeitet:

Ähnliche Themen

Server und Client für TCP und UDP

ca. 1200 PDF-Dateien auslesen und bestimmte Daten in eine CSV-Datei speichern

perl script, das Dateien aus einer Liste löscht

wxPython Problem

Falsche Rechte gesetzt beim Anlegen von Ordnern via Samba-Client

Zurück
Oben