Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 39
  1. #1

    feof() non fa il suo dovere!?

    Ciao a tutti!

    eccomi qui con uno dei miei dubbi

    Sto scrivendo un programmino per manipolare i file mul di ultima online.
    Devo scorrere un file indice per recuperare i valori di seek da usare per recuperare i dati da un altro file.

    Ecco la funzione che uso:

    Codice PHP:
    function artmulIdxs() {    
        global 
    $fp//<- puntatore al file aperto in read-binary
        
    $idxs = Array();
        for(
    $x=0;feof($fp)===false;$x++) { //feof dovrebbe ritornare false alla fine del file
            
    $lk=fread($fp,4);
            
    $size fread($fp,4);
            
    $unknow fread($fp,4);
                    echo 
    ftell($fp), "\n";
            if(
    $size === false || $unknow === false || $lk === falsetrigger_error("Il file è terminato in modo imprevisto",E_USER_NOTICE);
            else 
    $idxs[] = new artidx($x+1,$lk,$size,$unknow);
        }
        return 
    $idxs;

    Ora, tutto funziona alla perfezione finchè non arrivo alla fine del file.
    Mi spiego meglio.
    Il ciclo gira tranquillamente e tutti i dati vengono recuperati ma mi va in output questo:

    (riporto solo le ultime righe)

    786396
    786408
    786420
    786432
    786432

    Trovati 65537 artworks.
    Invalid lookup_bytes for 65537 (0).

    Cosa succede!?
    Nel ciclo arrivo alla fine (lo dimostra ftell) e per una volta è corretto che venga riportato perchè ho appena finito di leggere l'ultimo byte. Ma poi cosa succede!?
    Ho letto l'ultimo byte!!! Perchè feof fa rientrare ancora una volta nel ciclo!?

    Ripassa per i vari fread che ritornano 0 byte (giustamente siamo ad EOF), la posizione nel file non viene variata, ma al secondo tentativo feof rileva la fine del file! :master:

    E' un bug secondo voi?
    Devo segnalarlo?

    Grazie!!

    Lungo le due rive del fiume gelato si stendeva la cupa e tetra foresta di abeti, dai quali il vento aveva appena spazzato il manto di brina. Nella luce crepuscolare quegli abeti neri e sinistri sembravano inclinarsi l'uno verso l'altro. Un silenzio minaccioso incombeva sul paesaggio, privo di qualsiasi segno di vita o di movimento, e desolato e freddo al punto da non poter ispirare che un solo sentimento: quello della più triste malinconia. E nello stesso tempo pareva che da quel paesaggio trapelasse una specie di riso, un riso ben più spaventoso di qualsiasi malinconia o tristezza, un riso tragico, come quello di una sfinge, un riso agghiacciante più della brina e che rammendava l'incombere minaccioso dell'ineluttabile. Era la saggezza potente e impenetrabile dell'eternità che irrideva alla vita, alla sua futilità e agli sforzi degli uomini.

  2. #2

    Così ad occhio ..........

    Ciao.
    Il manuale indica questo modo
    di utilizzare feof
    while (!feof($handle)) {
    $contents .= fread($handle, 8192);
    }
    Spero ti possa essere d'aiuto
    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  3. #3
    che io sappia feof() alla fine del file restituisce true e non false...mi apre strano che los cript funzioni...

  4. #4
    Sì, feof ritorna true in caso di EOF, mi sono confuso nel commento
    Lo script cmq è giusto infatti

    Codice PHP:
    for($x=0;feof($fp)===false;$x++) 
    Cioè fintanto che feof ritorna false si prosegue.

    Per il resto considerato che feof ritorna solo true o false scrivere

    Codice PHP:
    while (!feof($handle)) { 
    o scrivere

    Codice PHP:
    while (feof($handle)===false) { 
    non cambia nulla (subito avevo usato la negazione anch'io).

    Qualcuno ha qualche altra idea? :master:
    Lungo le due rive del fiume gelato si stendeva la cupa e tetra foresta di abeti, dai quali il vento aveva appena spazzato il manto di brina. Nella luce crepuscolare quegli abeti neri e sinistri sembravano inclinarsi l'uno verso l'altro. Un silenzio minaccioso incombeva sul paesaggio, privo di qualsiasi segno di vita o di movimento, e desolato e freddo al punto da non poter ispirare che un solo sentimento: quello della più triste malinconia. E nello stesso tempo pareva che da quel paesaggio trapelasse una specie di riso, un riso ben più spaventoso di qualsiasi malinconia o tristezza, un riso tragico, come quello di una sfinge, un riso agghiacciante più della brina e che rammendava l'incombere minaccioso dell'ineluttabile. Era la saggezza potente e impenetrabile dell'eternità che irrideva alla vita, alla sua futilità e agli sforzi degli uomini.

  5. #5
    Basta che ci sia un carattere in + e può entrare a rifare l'ultimo ciclo (dove però non trova altro che quel byte).

  6. #6
    siamo con seek già alla fine del file

    Ripassa per i vari fread che ritornano 0 byte (giustamente siamo ad EOF), la posizione nel file non viene variata, ma al secondo tentativo feof rileva la fine del file!
    Se dopo i read il il seek nel file aumentasse potremmo dire di aver letto ancora un byte.
    Ma così non è
    Lungo le due rive del fiume gelato si stendeva la cupa e tetra foresta di abeti, dai quali il vento aveva appena spazzato il manto di brina. Nella luce crepuscolare quegli abeti neri e sinistri sembravano inclinarsi l'uno verso l'altro. Un silenzio minaccioso incombeva sul paesaggio, privo di qualsiasi segno di vita o di movimento, e desolato e freddo al punto da non poter ispirare che un solo sentimento: quello della più triste malinconia. E nello stesso tempo pareva che da quel paesaggio trapelasse una specie di riso, un riso ben più spaventoso di qualsiasi malinconia o tristezza, un riso tragico, come quello di una sfinge, un riso agghiacciante più della brina e che rammendava l'incombere minaccioso dell'ineluttabile. Era la saggezza potente e impenetrabile dell'eternità che irrideva alla vita, alla sua futilità e agli sforzi degli uomini.

  7. #7
    UP
    Lungo le due rive del fiume gelato si stendeva la cupa e tetra foresta di abeti, dai quali il vento aveva appena spazzato il manto di brina. Nella luce crepuscolare quegli abeti neri e sinistri sembravano inclinarsi l'uno verso l'altro. Un silenzio minaccioso incombeva sul paesaggio, privo di qualsiasi segno di vita o di movimento, e desolato e freddo al punto da non poter ispirare che un solo sentimento: quello della più triste malinconia. E nello stesso tempo pareva che da quel paesaggio trapelasse una specie di riso, un riso ben più spaventoso di qualsiasi malinconia o tristezza, un riso tragico, come quello di una sfinge, un riso agghiacciante più della brina e che rammendava l'incombere minaccioso dell'ineluttabile. Era la saggezza potente e impenetrabile dell'eternità che irrideva alla vita, alla sua futilità e agli sforzi degli uomini.

  8. #8
    UP
    Lungo le due rive del fiume gelato si stendeva la cupa e tetra foresta di abeti, dai quali il vento aveva appena spazzato il manto di brina. Nella luce crepuscolare quegli abeti neri e sinistri sembravano inclinarsi l'uno verso l'altro. Un silenzio minaccioso incombeva sul paesaggio, privo di qualsiasi segno di vita o di movimento, e desolato e freddo al punto da non poter ispirare che un solo sentimento: quello della più triste malinconia. E nello stesso tempo pareva che da quel paesaggio trapelasse una specie di riso, un riso ben più spaventoso di qualsiasi malinconia o tristezza, un riso tragico, come quello di una sfinge, un riso agghiacciante più della brina e che rammendava l'incombere minaccioso dell'ineluttabile. Era la saggezza potente e impenetrabile dell'eternità che irrideva alla vita, alla sua futilità e agli sforzi degli uomini.

  9. #9
    Utente di HTML.it L'avatar di mark2x
    Registrato dal
    Nov 2005
    Messaggi
    1,940
    Originariamente inviato da IroN@xiD
    Per il resto considerato che feof ritorna solo true o false scrivere

    Codice PHP:
    while (!feof($handle)) { 
    o scrivere

    Codice PHP:
    while (feof($handle)===false) { 
    non cambia nulla (subito avevo usato la negazione anch'io).
    Però se ho ben capito tu stai usando questo:

    codice:
    for($x=0;feof($fp)===false;$x++)
    che è diverso dal ciclo while... Ovvero, stai usando $x come variabile di ciclo e dai una condizione su un'altra var: feof($fp)

    [.:: JaguarXF ::.]
    __________________

  10. #10
    Ma $x non è una variabile di ciclo.
    E' solo una variabile che inizializzo per comodità all'interno del for ed incremento con la sintassi del ciclo for.
    Poi per il check uso la stessa cosa che si utilizzerebbe nel while..

    Cioè è come se scrivessi

    Codice PHP:
    $x=0;
    while(
    feof($fp)===false) {
       ...
       
    $x++;

    Non cambia assolutamente nulla
    Lungo le due rive del fiume gelato si stendeva la cupa e tetra foresta di abeti, dai quali il vento aveva appena spazzato il manto di brina. Nella luce crepuscolare quegli abeti neri e sinistri sembravano inclinarsi l'uno verso l'altro. Un silenzio minaccioso incombeva sul paesaggio, privo di qualsiasi segno di vita o di movimento, e desolato e freddo al punto da non poter ispirare che un solo sentimento: quello della più triste malinconia. E nello stesso tempo pareva che da quel paesaggio trapelasse una specie di riso, un riso ben più spaventoso di qualsiasi malinconia o tristezza, un riso tragico, come quello di una sfinge, un riso agghiacciante più della brina e che rammendava l'incombere minaccioso dell'ineluttabile. Era la saggezza potente e impenetrabile dell'eternità che irrideva alla vita, alla sua futilità e agli sforzi degli uomini.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.