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



#!/COMMUNITY

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




12.02.2012 / 04:08

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


BeitragDatei ö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

Beitragre: 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

Beitragre: 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

Beitragre: 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

Beitragre: 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

Beitragre: 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

Beitragre: 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

Beitragre: 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

Beitragre: 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

Beitragre: 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

Beitragre: Datei öffnen
Seitenanfang
Dank euch allen.

Datum: 06.01.2005-17:03

-






-
-