PHP: gestione file sequenziale

23
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

description

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

Transcript of PHP: gestione file sequenziale

Page 1: 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

Page 2: PHP: gestione file sequenziale

Lettura dei record di un file sequenziale

Vediamo cosa accade

Page 3: PHP: gestione file sequenziale

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

Page 4: PHP: gestione file sequenziale

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

Page 5: PHP: gestione file sequenziale

Lettura del record successivo

Page 6: PHP: gestione file sequenziale

Lettura del record successivo

Page 7: PHP: gestione file sequenziale

Lettura del record successivo

Page 8: PHP: gestione file sequenziale

Lettura del record successivo

Page 9: PHP: gestione file sequenziale

Lettura del record successivo

End of file (eof)

Page 10: PHP: gestione file sequenziale

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];[...]

Page 11: PHP: gestione file sequenziale

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.

Page 12: PHP: gestione file sequenziale

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.

Page 13: PHP: gestione file sequenziale

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.

Page 14: PHP: gestione file sequenziale

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

Page 15: PHP: gestione file sequenziale

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

Page 16: PHP: gestione file sequenziale

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!.

Page 17: PHP: gestione file sequenziale

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.

Page 18: PHP: gestione file sequenziale

Cos'ì facendo otteniamo un vettore di 6 elementi

ciascuno dei quali contiene un vettore (che rappresenta il

record con i suoi campi)

Page 19: PHP: gestione file sequenziale

[...]$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.

Page 20: PHP: gestione file sequenziale

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>”; } }[...]

Page 21: PHP: gestione file sequenziale

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...

Page 22: PHP: gestione file sequenziale

Per sovrascrivere un file sequenziale leggendo da un

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

Page 23: PHP: gestione file sequenziale

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