Bookmarks

Yahoo Gmail Google Facebook Delicious Twitter Reddit Stumpleupon Myspace Digg

Search queries

www.xxxcon, which comes first ob_start or session, wwwxxx/58/2010, xxxxdup, xxxxdup, mailx informatii, should producers of software-based services, such as atms, be held liable for economic injuries suffered when their systems fail?, mysql feiertage, bash netcat eof, 192.168.1.41:8000

Links

XODOX
Impressum

#1: Zeilenweise lesen einer Datei

Posted on 2008-04-03 13:34:14 by Thomas Guettler

Hallo,

Ich möchte von einem Filedescriptor zeilenweise lesen
und jedesmal prüfen, ob das Lesen erfolgreich war. Als
Vorlage diente diese URL:

http://perldoc.perl.org/functions/readline.html

Leider funktioniert das nicht, wenn die letzte Zeile kein
Newline Zeichen am Ende hat:

{{{
open FD, "test.txt" or die $!;
for (;;) {
undef $!;
unless (defined( $line = <FD> )) {
die $! if $!;
last; # reached EOF
}
print "line $line";
}
close FD;
}}}

===> perl file.pl
line ...
Bad file descriptor at file.pl line 5, <FD> line 2.


Man könnte nun bei jedem Scheifendurchlauf prüfen ob
die Zeichenkette mit \n endet, aber gibt es nicht eine
bessere Lösung?

Thomas

Report this message

#2: Re: Zeilenweise lesen einer Datei

Posted on 2008-04-03 13:55:25 by Peter Ludikovsky

Thomas Guettler wrote:
> Hallo,
>
> Ich möchte von einem Filedescriptor zeilenweise lesen
> und jedesmal prüfen, ob das Lesen erfolgreich war. Als
> Vorlage diente diese URL:
>
> http://perldoc.perl.org/functions/readline.html
>
> Leider funktioniert das nicht, wenn die letzte Zeile kein
> Newline Zeichen am Ende hat:
>
> {{{
> open FD, "test.txt" or die $!;
> for (;;) {
> undef $!;
> unless (defined( $line = <FD> )) {
> die $! if $!;
> last; # reached EOF
> }
> print "line $line";
> }
> close FD;
> }}}
>
> ===> perl file.pl
> line ...
> Bad file descriptor at file.pl line 5, <FD> line 2.
>
>
> Man könnte nun bei jedem Scheifendurchlauf prüfen ob
> die Zeichenkette mit \n endet, aber gibt es nicht eine
> bessere Lösung?
>
> Thomas

wäre es nicht einfacher so:

open FD,"test.txt" or die $!;
while($line = <FD>){
#whatever
}

hth
/peter

Report this message

#3: Re: Zeilenweise lesen einer Datei

Posted on 2008-04-03 14:11:00 by Michael Bernhard

Hi Thomas,

> Man könnte nun bei jedem Scheifendurchlauf prüfen ob
> die Zeichenkette mit \n endet, aber gibt es nicht eine
> bessere Lösung?

# perl -pe '' blablub.txt ;)


aka


# perl -ne ' print $_ ' blablub.txt



aka

#!/usr/bin/perl
while (<>) {
print $_;
}




VG



ciao
bemi

Report this message

#4: Re: Zeilenweise lesen einer Datei

Posted on 2008-04-03 15:12:18 by Frank Seitz

Thomas Guettler wrote:
>
> Ich möchte von einem Filedescriptor zeilenweise lesen
> und jedesmal prüfen, ob das Lesen erfolgreich war.

Gibt es einen bestimmten Grund für diese akribische Prüfung?
Normalerweise programmiert niemand in Perl das Lesen
aus einer Datei so (wohl in der Annahme, dass das
sowieso nicht fehlschlägt).

> ===> perl file.pl
> line ...
> Bad file descriptor at file.pl line 5, <FD> line 2.

Unter Perl 5.8.8 funktioniert der Code,
nur leider nicht unter 5.10.0.

GrüÃe
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel

Report this message

#5: Re: Zeilenweise lesen einer Datei

Posted on 2008-04-04 15:07:05 by Thomas Guettler

Frank Seitz schrieb:
> Thomas Guettler wrote:
>> Ich möchte von einem Filedescriptor zeilenweise lesen
>> und jedesmal prüfen, ob das Lesen erfolgreich war.
>
> Gibt es einen bestimmten Grund für diese akribische Prüfung?
> Normalerweise programmiert niemand in Perl das Lesen
> aus einer Datei so (wohl in der Annahme, dass das
> sowieso nicht fehlschlägt).

Ich möchte es eben wissen, ob ein IO-Fehler aufgetreten ist, oder
nicht.

Und $! nur am Ende prüfen geht nicht, weil zwischendurch
Routinen gerufen werden, die $! ggf. verändern ....

Thomas



--
Thomas Guettler, http://www.thomas-guettler.de/
E-Mail: guettli (*) thomas-guettler + de

Report this message

#6: Re: Zeilenweise lesen einer Datei

Posted on 2008-04-06 13:21:25 by ichhassesp

"Thomas Guettler" <hv@tbz-pariv.de> schrieb im Newsbeitrag news:65mnfpF2ghmh4U1@mid.individual.net...
> Frank Seitz schrieb:
>> Thomas Guettler wrote:
>>> Ich möchte von einem Filedescriptor zeilenweise lesen
>>> und jedesmal prüfen, ob das Lesen erfolgreich war.
>>
>> Gibt es einen bestimmten Grund für diese akribische Prüfung?
>> Normalerweise programmiert niemand in Perl das Lesen
>> aus einer Datei so (wohl in der Annahme, dass das
>> sowieso nicht fehlschlägt).
>
> Ich möchte es eben wissen, ob ein IO-Fehler aufgetreten ist, oder
> nicht.
>
> Und $! nur am Ende prüfen geht nicht, weil zwischendurch
> Routinen gerufen werden, die $! ggf. verändern ....

Probier doch mal "local $!;" am Anfang jeder dieser Routinen. Das sollte den alten Wert beim Rücksprung wieder
herstellen.

Klaus

Report this message

#7: Re: Zeilenweise lesen einer Datei

Posted on 2008-04-06 13:36:21 by Frank Seitz

Thomas Guettler wrote:
> Frank Seitz schrieb:

>>>Ich möchte von einem Filedescriptor zeilenweise lesen
>>>und jedesmal prüfen, ob das Lesen erfolgreich war.
>>
>>Gibt es einen bestimmten Grund für diese akribische Prüfung?
>>Normalerweise programmiert niemand in Perl das Lesen
>>aus einer Datei so (wohl in der Annahme, dass das
>>sowieso nicht fehlschlägt).
>
> Ich möchte es eben wissen, ob ein IO-Fehler aufgetreten ist, oder
> nicht.

Das ist sehr gut und vernünftig gedacht. Beim Lesen aus
einer Datei kannst du dir diese Prüfung aber guten
Gewissens schenken, und so coden:

while (<FD>) {
# irgendwas mit $_ machen
}

Das machen alle so.

> Und $! nur am Ende prüfen geht nicht, weil zwischendurch
> Routinen gerufen werden, die $! ggf. verändern ....

Ist klar. Wie ich schon schrieb ist das Ganze
ein Problem von Perl 5.10.0, dort wird auf der Suche
nach dem letzten Zeilentrenner, wenn dieser nicht
vorhanden ist, über das Ende der Datei hinausgelesen
und $! irrtümlich gesetzt.

GrüÃe
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel

Report this message

#8: Re: Zeilenweise lesen einer Datei

Posted on 2008-04-06 13:58:17 by ichhassesp

"Frank Seitz" <devnull4711@web.de> schrieb im Newsbeitrag news:65rqtnF2i16etU2@mid.individual.net...
> Thomas Guettler wrote:
>> Frank Seitz schrieb:
>
>>>>Ich möchte von einem Filedescriptor zeilenweise lesen
>>>>und jedesmal prüfen, ob das Lesen erfolgreich war.
>>>
>>>Gibt es einen bestimmten Grund für diese akribische Prüfung?
>>>Normalerweise programmiert niemand in Perl das Lesen
>>>aus einer Datei so (wohl in der Annahme, dass das
>>>sowieso nicht fehlschlägt).
>>
>> Ich möchte es eben wissen, ob ein IO-Fehler aufgetreten ist, oder
>> nicht.
>
> Das ist sehr gut und vernünftig gedacht. Beim Lesen aus
> einer Datei kannst du dir diese Prüfung aber guten
> Gewissens schenken .....

Nicht unbedingt Netzwerkverbindungen können unterbrochen werden, ein USB-Stick abgezogen. Es soll auch schon Kratzer auf
CDs gegeben haben. Ich habe vor langer Zeit mal gelernt
"If anything in your program can go wrong, it will".

>
> Das machen alle so.

Ich auch. Das ist aber kein Argument.

GruÃ

Klaus

--
Persönliche Antwort bitte nur an
K<ohne_Punkt_und_Komma>Wittrock<Klammeraffe>web.de

Report this message

#9: Re: Zeilenweise lesen einer Datei

Posted on 2008-04-06 14:47:17 by Frank Seitz

K. Wittrock wrote:
> "Frank Seitz" <devnull4711@web.de> schrieb im Newsbeitrag news:65rqtnF2i16etU2@mid.individual.net...
>>
>>Das ist sehr gut und vernünftig gedacht. Beim Lesen aus
>>einer Datei kannst du dir diese Prüfung aber guten
>>Gewissens schenken .....
>
> Nicht unbedingt Netzwerkverbindungen können unterbrochen werden,
> ein USB-Stick abgezogen. Es soll auch schon Kratzer auf
> CDs gegeben haben. Ich habe vor langer Zeit mal gelernt
> "If anything in your program can go wrong, it will".

Wohl wahr.

>>Das machen alle so.
>
> Ich auch. Das ist aber kein Argument.

Ja. Nur leider weià ich nicht, wie man es ohne
viel Gehampel sauber programmiert.

GrüÃe
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel

Report this message

#10: Re: Zeilenweise lesen einer Datei

Posted on 2008-04-07 17:14:03 by ichhassesp

"Frank Seitz" <devnull4711@web.de> schrieb im Newsbeitrag news:65rv2nF2i16etU4@mid.individual.net...
> K. Wittrock wrote:
>> "Frank Seitz" <devnull4711@web.de> schrieb im Newsbeitrag news:65rqtnF2i16etU2@mid.individual.net...
>>>
>>>Das ist sehr gut und vernünftig gedacht. Beim Lesen aus
>>>einer Datei kannst du dir diese Prüfung aber guten
>>>Gewissens schenken .....
>>
>> Nicht unbedingt Netzwerkverbindungen können unterbrochen werden,
>> ein USB-Stick abgezogen. Es soll auch schon Kratzer auf
>> CDs gegeben haben. Ich habe vor langer Zeit mal gelernt
>> "If anything in your program can go wrong, it will".
>
> Wohl wahr.
>
>>>Das machen alle so.
>>
>> Ich auch. Das ist aber kein Argument.
>
> Ja. Nur leider weià ich nicht, wie man es ohne
> viel Gehampel sauber programmiert.

Schön wäre es, wenn man einen Error-Handler definieren könnte. Oder eine Funktion ioerr() analog zu eof(). Den
Perl-Entwicklern wird die Arbeit schon nicht ausgehen.

Das ist vielleicht eine Idee (nicht getestet):
while (<>) {
iseof = eof();
... # tue was mit $_
}
unless (iseof) {die "Lesefehler\n"}

GruÃ

Klaus

--
Persönliche Antwort bitte nur an
K<ohne_Punkt_und_Komma>Wittrock<Klammeraffe>web.de

Report this message

#11: Re: Zeilenweise lesen einer Datei

Posted on 2008-04-08 19:37:50 by hjp-usenet2

On 2008-04-03 13:12, Frank Seitz <devnull4711@web.de> wrote:
> Thomas Guettler wrote:
>> Ich möchte von einem Filedescriptor zeilenweise lesen
>> und jedesmal prüfen, ob das Lesen erfolgreich war.
[...]
>> ===> perl file.pl
>> line ...
>> Bad file descriptor at file.pl line 5, <FD> line 2.
>
> Unter Perl 5.8.8 funktioniert der Code,
> nur leider nicht unter 5.10.0.

Ich sehe da keinen Unterschied zwischen 5.8.8 und 5.10.0. Beide geben
bei mir beim Input "foo\nbar" aus:

line foo
Bad file descriptor at foo line 10, <FD> line 2.
line bar

"line bar" (ohne newline am Ende) wird erst nach dem die ausgegeben,
weil STDOUT zeilengebuffert ist.

hp

Report this message

#12: Re: Zeilenweise lesen einer Datei

Posted on 2008-04-08 20:01:08 by Frank Seitz

Peter J. Holzer wrote:
> On 2008-04-03 13:12, Frank Seitz <devnull4711@web.de> wrote:
>>Thomas Guettler wrote:
>>>
>>>===> perl file.pl
>>>line ...
>>>Bad file descriptor at file.pl line 5, <FD> line 2.
>>
>>Unter Perl 5.8.8 funktioniert der Code,
>>nur leider nicht unter 5.10.0.
>
> Ich sehe da keinen Unterschied zwischen 5.8.8 und 5.10.0. Beide geben
> bei mir beim Input "foo\nbar" aus:
>
> line foo
> Bad file descriptor at foo line 10, <FD> line 2.
> line bar
>
> "line bar" (ohne newline am Ende) wird erst nach dem die ausgegeben,
> weil STDOUT zeilengebuffert ist.

Das ist bei mir anders.
Die Warnung bekomme ich nur unter 5.10.0, unter 5.8.8 geht's.

GrüÃe
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel

Report this message