Crea sito

Pillole di php – Leggere un file di testo al contrario

| 29 novembre 2007 | 6 Comments

Se vi è mai capitato di scrivere su un file di testo tramite php, avrete sicuramente notato che la scrittura è sequenziale, ovvero la nuova linea scritta, viene messa in ultima posizione. La conseguenza è che la lettura deve avvenire dalla prima all’ultima riga del file a meno di creare una funzione che legga tutto il file posizionandolo in un array e poi lo restituisca leggendolo dall’ultima alla prima posizione. Esiste un trucco per evitare tutto questo, ed è anche molto semplice!;)

La funzione array_reverse() può essere applicata anche ai file permettendo la lettura delle linee nel file come fossero un array inverso rispetto al senso di scrittura (ovvero dall’ultima alla prima riga)

Esempio:

Abbiamo un file di testo classifica.txt ordinato per punteggio crescente, noi vogliamo mostrarlo in senso decrescente, ovvero dal punteggio più alto al punteggio più basso, come tutte le classifiche che si rispettino. 😛

<?php

$file = array_reverse(file(‘classifica.txt’)); <– assegno all’array $file i valori letti in maniera inversa presi dal file “classifica.txt” con la funzione array_reverse().

foreach ($file as $riga) { <– creo un ciclo per cui ogni riga del file di testo invertito preso dall’array $file viene assegnato alla variabile $riga.

echo $riga . ‘\r\n’; <– stampo a video la variabile $riga seguita dal carattere “a capo” ‘\r\n’.

} <– chiudo il ciclo del foreach
?>

VN:F [1.9.22_1171]
Rating: 10.0/10 (1 vote cast)
VN:F [1.9.22_1171]
Rating: +1 (from 1 vote)
Pillole di php - Leggere un file di testo al contrario, 10.0 out of 10 based on 1 rating

Tags: , , , , , , , , , , , , , , , , , , , , , ,

Category: Senza categoria

About the Author ()

Comments (6)

Trackback URL | Comments RSS Feed

  1. vincy6 scrive:

    Bell’articolo sono entrato tramite google…mi serviva grazie

    VA:F [1.9.22_1171]
    Rating: 0.0/5 (0 votes cast)
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  2. vincy6 scrive:

    una cosa
    da errore se non sostituite i caratteri ’ sostituiti con questi ‘
    ciaooo

    VA:F [1.9.22_1171]
    Rating: 0.0/5 (0 votes cast)
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  3. MindLab scrive:

    Si, ho dovuto sostituirli se no il blog vecchio li leggeva come codice da interpretare e non lo faceva vedere:)

    VN:F [1.9.22_1171]
    Rating: 0.0/5 (0 votes cast)
    VN:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  4. LucaC scrive:

    Non potresti postare un esempio completo?
    Il mio codice che legge e stampa a video il file:

    $row = 1;
    $handle = fopen($FILESTATISTICHE, “r”);
    while (($data = fgetcsv($handle, 1000, “,”)) !== FALSE) {
    if (is_int(($row + 1) / 2) == true)
    $bg = “#CCFFFF”;
    //definizione del colore
    else
    $bg = “#66FFFF”;
    $num = count($data);
    // echo ” $num fields in line $row: \n”;

    //echo “”;
    $row++;
    echo “”;
    for ($c=0; $c < $num; $c++) {

    echo “”;
    echo $data[$c].”\n”;
    //echo “”;
    echo “”;
    }
    }
    fclose($handle);

    Potresti integrarmelo così che visualizzo la riga più recente come prima riga?

    VA:F [1.9.22_1171]
    Rating: 0.0/5 (0 votes cast)
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  5. MindLab scrive:

    Sono stato a scervellarmi sulla cosa ma mi sa che è inattuabile usare fgetcsv con array_reverse in maniera concatenata. La funzione fgetcsv è di lettura ottimizzata per i file csv che resituisce l’array dei valori contenuti in una singola riga, in questo caso è impossibile invertire un array con array_reverse non potendosi mettere fra l’acquisizione dell’array e la reinterpretazione degli stessi. In poche parole credo che l’unica sia leggere il file csv con fgetcsv e immagazzinarlo in un array su cui usare array_reverse e poi mostrarlo a video con un for. In alternativa dovresti abbandonare fgetcsv e creare una funzione di lettura basata direttamente sulla lettura invertita del file (che forse sarebbe anche più semplice e immediata).

    P.S. non mi è molto chiaro cosa volevi fare nel tuo codice tranne leggere i file e assegnare un colore, credo cmq faccia parte di un manager di log per un sito o no?

    VN:F [1.9.22_1171]
    Rating: 0.0/5 (0 votes cast)
    VN:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  6. MindLab scrive:

    Potresti usare una cosa del tipo:

    < ?php $file = array_reverse(file("d.csv")); foreach ($file as $riga) { $data = split(",", $riga); echo $data[0]."\n"; echo $data[1]."\n"; //etc etc.. } ?>

    Però dovresti poi pulire le stringhe negli array dai possibili apici.

    VN:F [1.9.22_1171]
    Rating: 0.0/5 (0 votes cast)
    VN:F [1.9.22_1171]
    Rating: 0 (from 2 votes)

Leave a Reply