picture picture
octobre 16, 2006 Excel, PHP 1 Commentaire

PHP : extraire des tuples et des champs d’un fichier CSV ou TXT

… avec en prime : comment exclure les lignes vides de la boucle de lecture ?

Petit bout de code tout simple qui m’a quand meme fait galérer quelques temps …

Le probleme n’est pas de lire et de traiter un fichier CSV en PHP : il y a une excellente fonctions pour celà : fgetcsv()

Exemple d’utilisation :

  $fichier = "../dossier/fichier.csv";
$fic = fopen($fichier, 'rb');

echo "<table border='1'> ";
for ($ligne = fgetcsv($fic, 1024); !feof($fic); $ligne = fgetcsv($fic, 1024)) {
echo "<tr>";
$j = sizeof($ligne);
for ($i = 0; $i < $j; $i++) {
echo "<td>$ligne[$i]</td>";
}
echo "</tr>";
}
echo "</table> ";

Le problème est plutôt de faire le meme travail pour des fichiers utilisant d’autres séparateurs ( ‘/’ ou ‘,’ ou ‘-‘ etc…), voire meme simplement des espaces blancs ou des tabulations.
Les données extraites pourront etre ensuites traitées pour etre introduites dans une base des données MySQL par exemple.

Le soucis est alors de détecter les lignes vides engendrées souvent en début ou en fin de fichier (voire au milieu !)

L’astuce consiste à compter le nombre de caractère des lignes en leur otant les espaces vierges de début et de fin grâce a la fonction trim().
Du coup les lignes vides comptabilisent effectivement zéro caractère, et seront faciles à sauter dans les boucles de lecture, grâce à l’ argument de rupture PHP : ‘continue;’

Le code de lecture d’un fichier dont les lignes contiennent des variables séparées par des ‘/’ sera donc, par exemple :

 $filename = '../dossier/fichier.txt'; if (file_exists($filename)) { 	$lignes = file($filename); 	foreach ($lignes as $ligne_num => $ligne) 	{ 		// ==== pour chaque ligne, création d'un tableau d'éléments séparés par les slashes : 		$tupple[$ligne_num] = explode('/', $ligne); 		// === saut les lignes vides : 		if(strlen(trim($ligne)) == '0')                // === autre methode equivalente pour detecter les lignes vides :                 if (empty(trim($ligne))) 		{ 		   continue; 		} 		// === extraction des champs : 		for($i = 0; $i < count($tupple[$ligne_num]); $i++) 		{ 			echo $tupple[$ligne_num][$i]; 			echo '<br />'; 		} 	} }

;)

One Response to “PHP : extraire des tuples et des champs d’un fichier CSV ou TXT”

One Comment

  1. very nice site. I said it before and I say it now – GO ON with this site! Your website is very important for a whole continued!

Commentaire

Name

Mail (ne sera pas publié)

Website

Laisser ces deux champs tels quels :
:D :-) :( :o 8O :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: