Fondamenti di programmazione

Corso php a cura del prof. Pietro De Paolis

File e matrici in Php

Nella lezione precedente abbiamo visto la istruzione if che ci consente di scegliere lo stipendio annuo del professore di scuola secondaria superiore in base agli anni di servizio. Ma il programma che noi vogliamo produrre è leggermente più complesso, in quanto vogliamo che calcoli lo stipendio di tutto il personale della scuola. In pratica vogliamo scegliere dalla seguente tabella

anni di servizioCollaboratore scolastico Collaboratore scolastico dei servizi Assistenti amministrativi Coordinatore amm.e tecnico Dir. servizi gen. ed amm. e amm. Docente sc. materna ed elem. Docente diplomato istituti sec. II° Docente scuola media Docente laureato istituti sec. II°
  da 0 a 2
 13659.90
 14010.01
 15302.38
 17495.96
 20230.62
 17582.23
 17582.23
 19082.50
 19082.50
 da 3 a 8
 13925.18
 14268.28
 15646.28
 17968.93
 20819.59
 18057.22
 18057.22
 19609.37
 20163.59
 da 9 a 14
 14896.91
 15223.27
 16874.38
 19425.88
 22664.73
 19520.02
 19520.02
 21331.19
 21893.39
 da 15 a 20
 15784.44
 16120.67
 18037.47
 21127.37
 24774.81
 21228.70
 21228.70
 23313.53
 24027.25
 da 21 a 27
 16668.09
 17031.95
 19207.56
 22778.93
 27053.50
 22887.02
 23701.35
 25238.19
 26745.11
 da 28 a 34
 17334.59
 17677.28
 20040.76
 24408.24
 29394.78
 24523.25
 25323.78
 27126.29
 28525.83
 da 35 a
 17801.67
 18159.30
 20679.35
 25621.63
 31672.27
 25741.51
 26556.37
 28525.83
 29945.29

lo stipendio in base alla qualifica del dipendente, oltre che in base agli anni di servizio. Essendo la tabella di diverse righe e precisamente 8 e di diverse colonne e precisamente 10, i valori necessari da ricavare dalla tabella sono ben 80. Non è pensabile memorizzare tutti i valori nel nostro programma prevedendo 80 istruzioni diverse. Anche perché dobbiamo imparare il meccanismo per ricavare un dato quando i dati diventano migliaia oppure milioni. 

Non ci resta che fare uso dei file, e il php ce lo consente.

I file

Che cosa sono i file? Sono dei testi che noi scriviamo e memorizziamo sul computer secondo un metodo che noi vogliamo. Nel nostro caso vogliamo dapprima creare un file che memorizzi i valori della tabella; successivamente leggeremo il contenuto del file per ricavare i valori che ci servono.

Su quale computer vengono creati i file? In php i file sono molto sicuri, in quanto non vengono creati sul computer dell'utente che naviga in Internet ma vengono creati sul server, cioè sul computer principale sul quale vengono eseguiti i programmi php. Per cui l'utente non vede mai il contenuto del file, ma solo le informazioni che il programmatore ha previsto. Questo crea un meccanismo di sicurezza per il navigatore, in quanto viene impedito ai siti web di memorizzare o di leggere dei dati sul computer locale.

Creazione di un file

Un file lo possiamo creare con un qualunque programma di scrittura, noi usiamo WordPad, e lo salviamo in formato testo, come siamo abituati noi. Partiamo ora da un semplice esempio e poi andremo verso il file più complesso che ci serve. Supponiamo di voler memorizzare solo i dati di questa tabella semplificata:

anni di servizio Docente laureato istituti sec. II° 
da 0 a 2
 19082.50
da 3 a 8
 20163.59
da 9 a 14
 21893.39
da 15 a 20
 24027.25
da 21 a 27
 26745.11
da 28 a 34
 28525.83
da 35 a
 29945.29

 

Li possiamo scrivere e memorizzare in questo modo:

da 0 a 2
 19082.50
da 3 a 8
 20163.59
da 9 a 14
 21893.39
da 15 a 20
 24027.25
da 21 a 27
 26745.11
da 28 a 34
 28525.83
da 35 a
 29945.29

Cioè abbiamo diviso la tabella in un certo numero di righe del nostro file di testo; nel primo rigo abbiamo scritto gli anni di servizio, cioè da 0 a 2; nel rigo successivo lo stipendio annuo corrispondente; al terzo rigo gli anni di servizio da 3 a 8; nel rigo successivo il corrispondente stipendio. E così via per gli altri righi. Dopo ogni rigo premiamo sempre il tasto invio; salviamo tutto il testo in un file che chiamiamo stipendi.txt sempre nella stessa cartella in cui stiamo lavorando. A questo punto il file di testo è pronto, dobbiamo solo leggerlo mediante le istruzioni adeguate in php.

Istruzione fopen

I file per poterli leggerle è un pò complesso, nel senso che è facile sbagliare se non si segue una procedura adeguata che è la seguente.

1 - Prima di leggere il contenuto di un file occorre indicare con una istruzione di apertura che vogliamo aprire un certo file, di cui conosciamo il nome, e che cosa vogliamo fare con questo file, cioè se vogliamo leggere o vogliamo scrivere.

2 - Si danno i comandi di lettura di una riga del file; si memorizzano i dati in una variabile; si utilizzano i dati che servono.

3 - Terminato il lavoro di lettura o scrittura i file vanno chiusi con una apposita istruzione.

 Importante è, allora, che prima di usare un file occorre sempre aprirlo e alla fine chiuderlo.

Per aprire un file si usa la istruzione fopen, cioè file open abbreviato. La fopen va usata in un certo modo;

1- Dapprima scriviamo il nome del file da aprire in una variabile; per esempio:

$nomefile = "stipendi.txt";

questo ci consente di usare sempre la stessa variabile $nomefile per tutti i nostri programmi indipendentemente dal nome del file che dobbiamo leggere.

2 - Per attivare la apertura di un file ci creiamo una variabile; per esempio:

$fp = fopen($nomefile, "r");

questo perché la fopen è una operazione che apre un file ma solo se memorizziamo la operazione in una variabile da noi scelta a piacere, nel nostro caso abbiamo scelto la variabile $fp. Quando viene eseguita la istruzione di sopra l'interprete php apre il file il cui nome è contenuto in $nomefile, cioè apre il file che si chiama stipendi.txt; tuttavia occorre indicare anche che cosa dobbiamo fare con il file se cioè dobbiamo leggerlo oppure dobbiamo scrivere nel file. In particolare se mettiamo tra le virgolette la "r" che sta per read, cioè leggere, vuol dire che apriamo il file solo per leggerlo ma non vi possiamo scrivere. Il file viene iniziato a leggere dal primo rigo.

Se, invece, mettiamo "w", che sta per write, cioè scrivere, il file viene aperto per scrivere; si inizia a scrivere sul primo rigo; se il file con quel nome che abbiamo indicato non esiste esso viene creato; tuttavia, poiché inizia a scrivere dal primo rigo la "w" cancella tutto il contenuto che esisteva in precedenza nel file e scrive le nuove cose da scrivere. Vi sono altre opzioni che non facciamo. Vediamo ora una istruzione per leggere il contenuto del file cioè fgets.

Istruzione fgets

E' una istruzione che legge il contenuto di una riga di un file di testo.

Se scrivo:

$rigo1= fgets ($fp, 4096);

memorizzo nella variabile da me scelta di nome $rigo1 il contenuto della prima riga del file. La prima riga del file è separata dalla seconda in quanto abbiamo premuto il tasto "Invio" per andare la rigo successivo. Quindi leggiamo un rigo alla volta; $fp è una variabile che abbiamo posto in precedenza:

$fp = fopen($nomefile, "r");

per indicare sia il nme del file da aprire e sia che si voleva leggerlo. Il numero dopo la virgola, nel nostro caso 4096, indica il numero di byte da leggere; noi mettiamo sempre il valore massimo cioè 4096, in modo che siamo sicuri da leggere anche le righe molto lunghe.

Per leggere il secondo rigo scriviamo:

$rigo2= fgets ($fp, 4096);

per il terzo:

$rigo3= fgets ($fp, 4096);

e così via per gli altri righi.

Chiusura del file con fclose.

Terminato il lavoro di lettura dobbiamo sempre chiudere il file con una istruzione fclose, che sta per file close, cioè chiudi il file. Scriviamo:

fclose($fp);

cioè chiudi il file che avevamo aperto con $fp; dove $fp era:

$fp = fopen($nomefile, "r");

Scriviamo ora l'intero listato per leggere un file:

$nomefile = "stipendi.txt";

$fp = fopen($nomefile, "r");

$rigo1 = fgets ($fp, 4096);

$rigo2 = fgets ($fp, 4096);

$rigo3 = fgets ($fp, 4096);

fclose($fp);

teniamole in mente queste istruzioni, in quanto per i file vanno date tutte insieme ogni volta. Proviamo allora a scrivere un piccolo programma per leggerle i file e vedere il contento del file letto.

Scriviamo il seguente listato e salviamolo come letturafile.php ed eseguiamolo.

<html>

<body background="sfondo2.jpg">

<?php

print ("Programma per calcolare lo stipendio annuo lordo.<br><br>");

$nomefile = "stipendi.txt";

$fp = fopen($nomefile, "r");

$rigo1 = fgets ($fp, 4096);

$rigo2 = fgets ($fp, 4096);

$rigo3 = fgets ($fp, 4096);

$rigo4 = fgets ($fp, 4096);

fclose($fp);

print (" Se gli anni di servizio sono $rigo1 lo stipendio annuo lordo è €  $rigo2 <br><br>");

print (" Se gli anni di servizio sono $rigo3 lo stipendio annuo lordo è €  $rigo4 <br><br>");

?>

<body>

</html>

 

Se lo eseguiamo otteniamo:

Questo vuol dire che il file stipendi.txt  è stato aperto e si sono letti i dati nel modo voluto, infatti corrispondono alla nostra tabella.

Le matrici

Come ogni linguaggio di programmazione anche il php fa uso delle matrici. Le matrici sono necessarie quando il numero di variabili da usare nel programma è molto elevato. Nel nostro programma di calcolo dello stipendio sono necessarie, infatti abbiamo 80 variabili da usare e non ci conviene inventare 80 nomi diversi, anche perché il programma diventerebbe troppo lungo. La matrice è una variabile abbinata ad un numero; il nome lo diamo a piacere. 

Esempio

$matrice [1] = $rigo1;

Memorizzo nella variabile $matrice il contenuto della variabile di $rigo1;

oppure:

$matrice[1]  = fgets ($fp, 4096);

Come si vede la matrice ha molti elementi che numeriamo partendo da zero fino al valore massimo che vogliamo.

$matrice[1]

$matrice[1]

$matrice[2]

$matrice[4]

Le matrici come le altre variabili in php non vanno dichiarate inizialmente ma solo quando ci servono;e possono contenere sia numeri che testo, cioè caratteri alfanumerici.

Modifichiamo ora il nostro programma di lettura di un file in modo da utilizzare le matrici. Otteniamo il listato:

<html>

<body background="sfondo2.jpg">

<?php

print ("Programma per calcolare lo stipendio annuo lordo.<br><br>");

$nomefile = "stipendi.txt";

$fp = fopen($nomefile, "r");

$matrice[1] = fgets ($fp, 4096);

$matrice[2] = fgets ($fp, 4096);

$matrice[3] = fgets ($fp, 4096);

$matrice[4] = fgets ($fp, 4096);

fclose($fp);

print (" Se gli anni di servizio sono $matrice[1] lo stipendio annuo lordo è €  $matrice[2] <br><br>");

print (" Se gli anni di servizio sono $matrice[3]  lo stipendio annuo lordo è €  $matrice[4] <br><br>");

?>

<body>

</html>

otteniamo lo stesso risultato di prima e cioè:

solo che ora abbiamo imparato a leggere i file e ad usare le matrici. Ci resta una ultima importante istruzione cioè quella dei cicli cioè la for, ma lo vedremo nella prossima lezione.

Corso di programmazione in PHP

Dizionario php

 

prof. Pietro De Paolis

Indice Scuola Elettrica - generico


Scuola Elettrica



 

Altre applicazioni


Mappa per tipo di scuola

 

Indice di tutte le pagine del sito


Guida per navigare


Richiesta informazioni


Scuola Elettrica