Datei öffnen
|
Seitenanfang |
| Hi, bin blutiger Anfänger und möchte eine .cr Datei zum lesen öffnen. Als Antwort bekomme ich jedoch das die Datei nicht exisitert. Natürlich tut sie dies und aufgrund von use FindBin habe ich wohl auch das richtige Arbeitverzeichnis. Kann mir jemand helfen? open CR, name or die "Fehler! ($!)"; while (<CR>){ chomp($vorname);} close CR; print "$vorname\n";
Datum: 05.01.2005-13:35

|
re: Datei öffnen
|
Seitenanfang |
my $name = '/path/to/file'; open(CR,"<$name") or die $!; while(my $line = <CR>){ chomp $vorname; # was ist $vorname?? } close CR; print $vorname,"\n"; Du solltest strict und warnings in Deinen Skripten benutzen... Warum machst Du immer ein chomp $vorname und gibst doch nur den letzten $vorname aus?? Bei Dir war name ein "Bareword". Du hättest "name" schreiben sollen...
Datum: 05.01.2005-15:04

|
re: Datei öffnen
|
Seitenanfang |
| Hi, danke für die schnelle Antwort. Allerdings bleibt die Fehlermeldung die gleiche. Dies ist selbst bei copy und paste Deiner Zeilen und Eingabe des Pfades der Fall. Vorname ist einfach eine Variable in welcher der eingelesene Name gespeichert werden soll. Ich gebe nur einen Namen aus da die "Liste" von Namen nur aus einem Namen besteht. Ich will ja erstmal nur verstehen wie ich eine Datei öffne und Daten auslese. mfg
Datum: 05.01.2005-16:47

|
re: Datei öffnen
|
Seitenanfang |
Hallo, bist du vielleicht auf einem msdos WinRedmond system?Da muessen dateinamen mit "doppeltenAnfz" gescrieben weerden. Die Trennzeichen fuer Pfade bitte auch doppelt. use Win32; my $name = "c:\\temp\\myList.txt"; open(CR,"<$name") or die $!; while(my $line = <CR>){ chomp $line; } close CR; print $line,"\n";
Datum: 05.01.2005-18:37

|
re: Datei öffnen
|
Seitenanfang |
| Hi, danke öffnen klappt nun ;). Natürlich klappt noch nicht alles aber jetzt will ich erstmal selber suchen. Vielen Dank an alle für die schnellen Antworten. mfg
Datum: 05.01.2005-23:12

|
re: Datei öffnen
|
Seitenanfang |
| >> Da muessen dateinamen mit "doppeltenAnfz" gescrieben weerden Nein, nein, nein! Wo hast Du das her? Ich mach das immer mit 'einfachen' Quotes und es funktiniert tadellos. Andernfalls waere es auch mit der Plattformunabhaengigkeit dahin. >> Die Trennzeichen fuer Pfade bitte auch doppelt. Ja, wenn man \ in Doppelanfuehrungszeichen verwendet muss man zwei nehmen, wenn man einen Backslash haben will - schliesslich ist dieser das Escape-Zeichen. Aber windowsspezifisch ist das nicht. Genausogut koennte man auch my $name = 'c:/temp/myList.txt'; schreiben und das ganze Problem damit umgehen. Ja, das funktioniert auch unter Windows.
Datum: 06.01.2005-15:37

|
re: Datei öffnen
|
Seitenanfang |
| Hallo, nachdem ich die nächsten Fehler finden konnte, stehe ich nun schon wieder. Das Einlesen funktioniert, allerdings "verliere" ich die gelesenen Namen nach verlassen der While Schleife. Die erste print Kontrolle innerhalb der geschweiften Klammeren liefert noch das gewünschte Ergebnis. Nach verlassen der Klammer erhalte ich durch print jedoch keine Wert(Kontrolle2 und Ausgabe). Wo ist mein Fehler? open(CR,"<$name") or die $!; while(@line = <CR>){ print @line; #Kontrolle1 } print @line; #Kontrolle2 close CR; print @line; #Ausgabe
Datum: 06.01.2005-11:55

|
re: Datei öffnen
|
Seitenanfang |
| Probier es mal so: open(CR,"<$name") or die $!; @line = <CR>; print @line; #Kontrolle1 print @line; #Kontrolle2 close CR; print @line; #Ausgabe
Datum: 06.01.2005-13:22

|
re: Datei öffnen
|
Seitenanfang |
| Hi, danke es funktioniert. Bist Du so freundlich und erklärst mir wieso die while Schleife nicht notwendig ist? Wenn ich es richtig verstehe dann funktioniert das Einlesen aus der Datei genauso wie die Zeile @line = qw / name1 name2 /; richtig? Wo liegt der Unterschied zwischen den Methoden? Mfg und tausend Dank
Datum: 06.01.2005-13:54

|
re: Datei öffnen
|
Seitenanfang |
| Wenn ein Dateihandle in Arraykontext verwendet wird, wird ab der aktuellen Position die gesammte restliche Datei in das Array eingelesen. Zur Verdeutlichung: Was die while-Schleife prueft ist folgendes: while (scalar @array) { ... }Schleifen pruefen ob die im Kopf gegebene Bedingung wahr (alles ausser Leerstring, undef oder 0) oder falsch ist. Logisch wahr oder falsch ist ein einzelner Wert, also ein Skalar. Das Array liefert im skalaren Kontext die Anzahl der darin enthaltenen Elemente. Deine Version versucht also erst die Datei in das Array zu lesen, dann erfolgt die obige Pruefung auf den Arrayinhalt. Beim ersten Durchlauf der while wird die "restliche" Datei in das Array gelesen. Array enthaelt X Elemente, alles prima. Danach startet der 2. Durchlauf, aber da Du schon im ersten Durchlauf bis an das Ende der Datei gelesen hast, wird nichts mehr eingelesen und das Array durch die Zuweisung im Schleifenkopf wieder geloescht. Das Array ist danach leer und die Schleife wird beendet.
Datum: 06.01.2005-15:48

|
re: Datei öffnen
|
Seitenanfang |
| Dank euch allen.
Datum: 06.01.2005-17:03

|