Corso PHP: 22 – Lettura e scrittura di un file CSV.

22.  Lettura e scrittura di un file csv.

Un file CSV (comma-separated values) è un formato usato per trasferire informazioni che possano essere strutturate come una tabella in righe e colonne. E’ un file di testo ove ogni riga ha un numero prefissato di campi separati normalmente dalla virgola o punto e virgola, ma il separatore in realtà può essere qualsiasi carattere scelto a piacimento.

Diversi programmi, tra i quali Excel ed Outlook, possono leggere direttamente questo formato.
22.1 Scrivere un file in formato CSV

Per scrivere un file in formato CSV, PHP offre una funzione chiamata fputcsv() che legge un array e scrive una riga del file. L’array è formato dalle colonne della riga in questione. Ovviamente un intero file CSV potrà essere scritto a partire da un array a due dimensioni, dove cioè ogni elemento dell’array corrisponda ad una riga del file e sia quindi composto da un array con le relative colonne.

Ritrascriviamo quanto già riportato alla lezione 19. Leggere e scrivere files (Parte 5^).

La sintassi della funzione è la seguente:

int fputcsv (resource $handle, array $fields [, string $delimiter = ',' [, string $enclosure = '"']])

Restituisce la lunghezza della stringa o FALSE in caso di fallimento.

Significato dei parametri:

$handle: è il puntatore al file che deve essere scritto. Il file deve essere stato aperto con successo da fopen() (e ovviamente non ancora chiuso).

$fields: è un array di valori che rappresenta le righe che devono essere scritte nel file CSV.

$delimiter: parametro opzionale di 1 carattere che indica il delimitatore usato tra un campo e l’altro. Il default è la virgola.

$enclosure: parametro opzionale di 1 carattere che indica il carattere da usare per delimtare ciascun campo. Il default sono le virgolette (“).

Esempio:

 

<?php
$lista = array (
   "Carlo,Mario,Gianni,Antonio",
   "Maria,Cristina,Anna,Roberta",
);
$file = fopen("nomi.csv","w");
foreach ($lista as $riga) {
   fputcsv($file, explode(',',$riga));
}
fclose($file);
?>

Le due righe scritte nel file CSV saranno:

Carlo,Mario,Gianni,Antonio

Maria,Cristina,Anna,Roberta

Lo stesso esempio può essere riscritto come segue:

 

<?php
$lista = array(
   array('Carlo','Mario','Gianni','Antonio'),
   array('Maria','Cristina','Anna','Roberta'),
);
$filename = './lista.csv';
$fh = fopen($filename,'w');
foreach ($lista as $lista_riga) {
   fputcsv($fh, $lista_riga) ;
}
fclose($fh);
?>

2.2 Leggere un file in formato CSV

Se si ha un file in formato CSV, per esempio esportato da Excel, che vogliamo importare per poterlo manipolare col PHP, utilizzeremo la funzione fgetcsv().

La sintassi della funzione è la seguente:

array fgetcsv (resource $handle [, int $length [, string $delimiter [, string $enc]]])

Restituisce un array contenente i campi letti.
Significato dei parametri:

$handle: è il puntatore al file che deve essere letto. Il file deve essere stato aperto con successo da fopen() (e ovviamente non ancora chiuso).

$length: è un parametro opzionale che dà la lunghezza, in caratteri, della massima riga. Va impostato con un numero maggiore della lunghezza della riga più lunga.

$delimiter: è un parametro opzionale di 1 carattere che indica il delimitatore usato tra un campo e l’altro. Il default è la virgola.

$enc: parametro opzionale di 1 carattere che indica il carattere da usare per delimtare ciascun campo. Il default sono le virgolette (“).

Come esempio leggiamo un file in formato CSV in un array multidimensionale:

 

<?php
$filename = './lista.csv';
$fp = fopen($filename,'r');
$CSVarray = array();
$nn = 0;
while($lista_riga = fgetcsv($fp, 1000, ";")) {  // ipotizzando che i campi siano separati dal';'
   for ($x=0; $x < count(lista_riga); x++) {
      $CSVarray[$nn][$x] = $data[$x];
   }
   $nn++;
}
fclose($fp);
?>

One thought on “Corso PHP: 22 – Lettura e scrittura di un file CSV.”

  1. Mancano un bel po’ di $ in diversi punti del codice. Il programma va in errore perché le interpreta come costanti.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *