Valori separati da virgole (CSV) è un formato di file di testo che utilizza le virgole per separare i valori e i caratteri di nuova riga per separare i record. Un file CSV memorizza dati tabulari (numeri e testo) in testo semplice, dove ciascuna riga del file rappresenta in genere un record di dati. Ogni record è composto dallo stesso numero di campi e questi sono separati da virgole nel file CSV. Se il delimitatore di campo stesso può apparire all’interno di un campo, i campi possono essere racchiusi tra virgolette.
Il formato file CSV è un tipo di formato file separato da delimitatori. I delimitatori utilizzati frequentemente includono la virgola, la tabulazione, lo spazio e il punto e virgola. Ai file separati da delimitatori viene spesso assegnata l’estensione “.csv” anche quando il separatore di campo non è una virgola. Molte applicazioni o librerie che utilizzano o producono file CSV dispongono di opzioni per specificare un delimitatore alternativo.
La mancanza di aderenza allo standard CSV RFC 4180 richiede il supporto di una varietà di formati CSV nel software di immissione dei dati. Nonostante questo inconveniente, il formato CSV rimane diffuso nelle applicazioni dati ed è ampiamente supportato da una varietà di software, comprese le comuni applicazioni per fogli di calcolo come Microsoft Excel. I vantaggi citati a favore del CSV includono la leggibilità umana e la semplicità del formato.
Anche se comma in inglese significa virgola, spesso le informazioni sono separate da punto e virgola, per il nostro esempio useremo il file dell’ISTAT sulle ripartizione regioni/province.
Riporto qui le prime 5 colonne delle 2 righe del file:
Codice;Codice 2;Codice 3;"Ripartizione";Geografica; 1;ITC;ITC;NORD;Nord;1;
Grazie alla funzione fgetcsv
fgetcsv( resource $handle, int $lunghezza = ?, string $delimitatore = ?, string $enclosure = ? ): array
Prende una riga da un puntatore a file e l’analizza in cerca di campi CSV, quindi leggiamo il file, tramite la funzione la leggiamo, e dopo la stampiamo determinando il numero di righe.
$row = 1; $handle = fopen("test.csv","r"); while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { $num = count($data); echo "<p> $num campi sulla linea $row: <br /></p>\n"; $row++; for ($c=0; $c < $num; $c++) { echo $data[$c] . "<br>\n"; } } fclose($handle)