PHP: gestione file sequenziale

Post on 13-Dec-2014

2.263 views 5 download

description

Inserimento, ricerca, visualizzazione, modifica ed eliminazione di un record di un file sequenziale.

Transcript of PHP: gestione file sequenziale

La gestione completa di un file sequenziale con i vettori in PHP

ricerca, inserimento, modifica, cancellazione di un record

Ovvero, spiegare i vettori in funzione della gestione di un file sequenziale

Lettura dei record di un file sequenziale

Vediamo cosa accade

Lettura di un record1 Apertura del file (il puntatore si posiziona sul

primo record)

2Lettura del record corrente (quello indicato dal puntatore) e trasferimento in memoria (variabile alfanumerica)

3Spostamento nel vettore

4Adesso i dati sono pronti per elaborazioni (somme/totalizzazioni) o output, dipendentemente dal problema assegnato

Lettura del record successivo

2Lettura del record corrente (quello indicato dal puntatore) e trasferimento in memoria (variabile alfanumerica)

3Spostamento nel vettore

4Adesso i dati sono pronti per elaborazioni (somme/totalizzazioni) o output, dipendentemente dal problema assegnato

Lettura del record successivo

Lettura del record successivo

Lettura del record successivo

Lettura del record successivo

Lettura del record successivo

End of file (eof)

I vettori con PHP

Per creare un vettore si può usare la funzione array(). Ipotizziamo di creare un vettore con i dati anagrafici di una persona (codice, cognome, nome, età,luogo di nascita).

[...]$vRecord = array(1,"Floris","Stefano", 42, "Greve in Chianti");[...]

per visualizzare il contenuto del vettore potrò usare il comando echo

[...]echo $vrecord[1];[...]

I vettori con PHP

Partendo dall'esempio precedente si capisce che i vettori sono anche un'ottima struttura per memorizzare i record.

Il vettore è un tipo di variabile che può essere usata facilmente per conservare i dati di un record.

Per esempio, si può creare un vettore con il numero di elementi corrispondente al numero dei campi del record da ospitare.

lettura di un file sequenziale con PHP

In questo esempio si usa un vettore creato "al volo" per ospitare i record letti da un file (in questo caso vRecord):[...]$nomefile = "clienti.txt"; // assegno nome del file$f = fopen($nomefile, "r"); // apro il file in letturaif ($f) { $record = fgets($f); // leggo primo record while (!eof($f)) { // ciclo fino a fine file

$vRecord = explode("\t",$record); // sposto i campi nel vettore $record = fgets($f); // Leggo record successivo } }[...]

Manca però ancora un passaggio... infatti in questo modo ad ogni lettura si scrive sopra vRecord perdendo il contenuto della lettura precedente.

1 Apertura file (puntatore sul primo record)

2Lettura del record corrente (quello indicato dal puntatore) e trasferimento in memoria (variabile alfanumerica)

3Spostamento nel vettore

4 $vRecord[4] ← 25

25

Non esiste alcun modo per......sovrascivere (modificando il contenuto di

uno o piu' campi) un record presente in un file sequenziale anche se si conosce la posizione

Supponiamo di voler “ringiovanire” Floris Stefano.

1 Apertura file (puntatore sul primo record)

2Lettura del record corrente (quello indicato dal puntatore) e trasferimento in memoria (variabile alfanumerica)

3Spostamento nel vettore

4Scelgo di cancellare il record con codice 4

Tantomeno Non esiste alcun modo per...

...cancellare un record presente in un file sequenziale anche se si

conosce la posizione

Queste operazioni si possono fare in memoria usando vettori (detti

array) e/o matrici.

Vorrebbe dire... collocare in memoria una struttura dati simile a

quella del file ma piu' flessibile?

Esatto!

Modifica e cancellazione di un record

2Lettura del record corrente (quello indicato dal puntatore) e trasferimento in memoria (variabile alfanumerica)

3Spostamento nel vettore

4

Con il sistema visto fino ad adesso il vettore $vRecord, ad ogni nuova

lettura perde il contenuto della lettura precedente...

… in quanto si sovrascrivono i dati con quelli del record appena letto. Risolviamo

salvando i dati in una struttura piu' complessa: un vettore di vettori!.

2Lettura del record corrente (quello indicato dal puntatore) e trasferimento in memoria (variabile alfanumerica)

3Spostamento nel vettore

4

Record dopo record, lettura dopo lettura...

… il vettore di vettori si riempie degli stessi dati contenuti nel file sequenziale.

Cos'ì facendo otteniamo un vettore di 6 elementi

ciascuno dei quali contiene un vettore (che rappresenta il

record con i suoi campi)

[...]$nomefile = "clienti.txt"; // assegno nome del file$f = fopen($nomefile, "r"); // apro il file in lettura$n=0; // uso un contatore di recif ($f) { $record = fgets($f); // leggo primo record $n = $n + 1; // incremento ad ogni lettura while (!eof($f)) { // ciclo fino a fine file

$vRecord = explode("\t",$record); // sposto i campi nel vettore $vScatola[$n] = $vRecord; // salvo il record $record = fgets($f); // Leggo record successivo } }[...] Le modifiche necessarie ad

un ciclo di lettura per salvare i record in un vettore (qui chiamato scatola) sono

minime.

Per visualizzare i dati presenti in un vettore si può usare un ciclo for

[...] // $n rappresenta il numero di elementi in $vScatola For ($x==1;$x<0$n;$x++) { // ciclo fino a fine vettore

Echo “<TR><TD>”; Echo “$vScatola[$x][0]”; // visual. campo 0 del rec. $x esimo

Echo “<\TD><TD>”; Echo “$vScatola[$x][1]”; // visual. campo 1 del rec. $x esimo

Echo “<\TD><TD>”; Echo “$vScatola[$x][2]”; // visual. campo 2 del rec. $x esimo

Echo “<\TD><TD>”; Echo “$vScatola[$x][3]”; // visual. campo 3 del rec. $x esimo Echo “<\TD><\TR>”; } }[...]

Per modificare un campo di un record di cui conosco la posizione o il valore di un

campo si può sempre utilizzare un ciclo for...

Per sovrascrivere un file sequenziale leggendo da un

vettore di vettori si puo' sempre usare un ciclo for...

Per sovrascrivere un file sequenziale leggendo da un vettore di vettori (scatola) e

saltare un record che si vuole eliminare si puo' sempre

usare un ciclo for...

http://www.allwebfree.it/articolo_php_alternativa_database.phphttp://www.allwebfree.it/php_txt.phphttp://win.itispanetti.it/panettistyle/dispense/I%20file%20in%20PHP.pdf