Re: [PHP] waarom werkt file reading niet
Rene Pijlman [on Mon, 03 Jan 2005 21:05:55 +0100] wrote:
> En op http://nl3.php.net/feof staat "De bestands pointer moet geldig zijn,
> en moet verwijzen naar een bestand dat succesvol geopend is door fopen(),
> popen() of fsockopen()". Aan die voorwaarde is voldaan. Er staat nergens
> dat er eerst een fgets() zou moeten hebben plaatsgevonden.
Dat stukje had ik gelezen, maar je zult met me eens zijn dat daar niet
staat exact WANNEER de eof-status wordt bereikt.
Inderdaad, het bestand is geopend. Maar kan op dat moment feof() reeds de
waarde true krijgen? Ik lees dat er niet uit.
Laat onverlet dat het misschien wel zo is, en de voorbeelden suggereren
dat inderdaad. Aan de andere kant: we zien wel vaker voorbeelden die niet
bijster kloppen op die PHP-site. Hele stapels gebruikerscommentaren zijn
er dan nodig om de juiste voorbeelden boven water te krijgen.
Kortom, ik weet gewoon niet precies hoe het zit, al dacht ik dat, met mijn
mainframe-programmeurs-achtergrond, eventjes wel te weten.
--
Erick
"This newsgroup is so important; we can't let things that are more
important interfere with it."
Re: [PHP] waarom werkt file reading niet
Erick T. Barkhuis:
>Rene Pijlman:
>> En op http://nl3.php.net/feof staat "De bestands pointer moet geldig zijn,
>> en moet verwijzen naar een bestand dat succesvol geopend is door fopen(),
>> popen() of fsockopen()". Aan die voorwaarde is voldaan. Er staat nergens
>> dat er eerst een fgets() zou moeten hebben plaatsgevonden.
>
>Dat stukje had ik gelezen, maar je zult met me eens zijn dat daar niet
>staat exact WANNEER de eof-status wordt bereikt.
Ik lees aldaar: "Geeft TRUE terug als de bestands pointer op EOF
(einde-van-bestand) is of als er een fout optreed. Anders geeft hij FALSE
terug."
Dat is toch duidelijk? De EOF wordt bereikt als de bestandspointer op
einde-van-bestand staat. Het bestand heeft N bytes, en er is EOF als de
bestandspointer op N staat.
>Inderdaad, het bestand is geopend. Maar kan op dat moment feof() reeds de
>waarde true krijgen?
Ik zou denken dat het antwoord "ja" is (bestand met 0 bytes), maar dat is
toch niet relevant? Roep de functie aan en je ziet vanzelf of je true of
false krijgt.
Laat ik het eens omdraaien. Het is toch bizar om fgets() aan te roepen,
als je niet eerst gechecked hebt of je niet al aan het einde van het
bestand bent en er dus niets meer te fgetsen is?
Ik betrek de stelling dat fgets($handle) in een fatsoenlijke taal als
preconditie zou moeten hebben:
not feof($handle)
En dan komt de programmeur in deze casus, ongeacht niveau en competentie,
noodgedwongen op het elegantere algoritme.
--
René Pijlman
Wat wil jij leren? http://www.leren.nl
Re: [PHP] waarom werkt file reading niet
Rene Pijlman [on Mon, 03 Jan 2005 21:51:57 +0100] wrote:
> Laat ik het eens omdraaien. Het is toch bizar om fgets() aan te roepen,
> als je niet eerst gechecked hebt of je niet al aan het einde van het
> bestand bent en er dus niets meer te fgetsen is?
Niet als het juist fgets() is dat de pointer op eof doet belanden.
--
Erick
"Onderschat niets! Het lot van de mensheid hing eens van een appel af" - Loepold Koch
Re: [PHP] waarom werkt file reading niet
Erick T. Barkhuis:
>Rene Pijlman:
>> Laat ik het eens omdraaien. Het is toch bizar om fgets() aan te roepen,
>> als je niet eerst gechecked hebt of je niet al aan het einde van het
>> bestand bent en er dus niets meer te fgetsen is?
>
>Niet als het juist fgets() is dat de pointer op eof doet belanden.
Tsja, de mores van de Object Oriëntatie zijn kennelijk niet aan de
COBOL-generatie besteed ;-)
--
René Pijlman
Wat wil jij leren? http://www.leren.nl
Re: [PHP] waarom werkt file reading niet
Erick T. Barkhuis <spamblok@webwax.nl> wrote:
>> Laat ik het eens omdraaien. Het is toch bizar om fgets() aan te roepen,
>> als je niet eerst gechecked hebt of je niet al aan het einde van het
>> bestand bent en er dus niets meer te fgetsen is?
>
> Niet als het juist fgets() is dat de pointer op eof doet belanden.
>
Stel je maar voor dat fopen() aan buffered file I/O doet. Waar de echte
filepointer zich bevindt doet niet terzake. Bij een feof() kan er of nog
van de filestream worden gelezen of er zitten nog ongelezen bytes in een
buffer om te lezen met bv fgets().
Re: [PHP] waarom werkt file reading niet
Rene Pijlman [on Mon, 03 Jan 2005 22:44:11 +0100] wrote:
> Erick T. Barkhuis:
> >Rene Pijlman:
> >> Laat ik het eens omdraaien. Het is toch bizar om fgets() aan te roepen,
> >> als je niet eerst gechecked hebt of je niet al aan het einde van het
> >> bestand bent en er dus niets meer te fgetsen is?
> >
> >Niet als het juist fgets() is dat de pointer op eof doet belanden.
>
> Tsja, de mores van de Object Oriëntatie zijn kennelijk niet aan de
> COBOL-generatie besteed ;-)
De wereld gaat naar de verdoemenis, dat blijkt maar telkens weer. :-(
--
Erick
"Je ben of te vroeg of te laat of op tijd; de eerste twee hep je niks an."
- Johan Cruijff, TV commentaar na Nederland-Joegoslavie op EK2000