giovedì 6 marzo 2008

Maneggiare dati in formato CSV

Maneggiare il formato csv è piuttosto comune, perché un gran numero si applicazioni permette di esportare i dati in questo formato molto semplice.
Per importare dal formato CSV può essere necessario un formato differente, come qualche formato basato su XML.
PHP è molto dotato per questo genere di compiti e pernette di risolvere il problema in poche linne di codice

if ( $handle = @fopen("../data/RA.csv","r") ) {
while (!feof($handle)) {
$buffer = fgets($handle, 1024);
$row = explode("|",$buffer);
echo "USI#: ".$row[4]."
\n";
}
fclose($handle);
}
?>

questo script risolve il problema ma non è una soluzione riutilizzabile, non funzionerà con formati leggermente diversi, che utilizzono un separatore differente ad esempio, o che quotino i dati nei campi e non permette di gestire l'output in una maniera differente da quella prevista.

Una soluzione più generale è possibile utilizzando una funzione come parametro, che permetta di controllare il formato di output


function file_csv_format($file, $separator, $format_funct){
$handle = @fopen($file, "r");
if ($handle) {
while (!feof($handle)) {
$buffer = fgets($handle, 1024);
$row = explode( $separator, $buffer);
$format_funct($row);
}
fclose($handle);
}
}
function simple_format($row){ echo "USI#: ".$row[4]."
\n"; }
file_csv_format("../data/RA.dat", '|', 'simple_format');

?>

se non abbiamo intenzione di riutilizzare la funzione di formattazione PHP permette di dichiarare una funzione anonima in line, secondo un paradigma detto "Programmazione Funzionale"

file_csv_format("../data/RA.dat", '|', create_function('$row','echo "USI#: ".$row[4]."
\n";'));
?>

in pratica permette di risolvere ilproblema precedente in maniera riutilizzabile, in una unica linea di codice.

1 commenti:

Anonimo ha detto...

leggere l'intero blog, pretty good