Pb php lors de l'extraction d'un champ

Fermé
maksuha - 6 janv. 2010 à 13:32
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 - 6 janv. 2010 à 17:57
Bonjour,
Bonjour,
J'ai un fichier csv qui contient beaucoup de données. Coté script, j'ai fractionné le fichier csv de facon a lire les lignes 1,2,3... séparée par des espaces. Jusqu'ici ca va. Mais maintenant je veux fractionner chaque champ séparés par des ";" à l'intérieur de chaque ligne, et la bug! Ca m'affiche Array to string conversion , pourquoi ?
Voici le code :

$fichier = file_get_contents("$dir/$nom_du_fichier");


$str = mb_convert_encoding($fichier, "utf8", "windows-1251");



$nbre_lignes = substr_count($str, "\n");

echo $nbre_lignes;

// =============== Extraction des lignes ==================
function explode_csv($string)//$string
{

return explode("\n",$string);

}


$arr1 = array($str);

$rows=array_map("explode_csv", array_map("trim", $arr1)); // ici on divise le contenu de $arr1 en lignes

print_r($rows[0][3]); // Affiche la 3e ligne OK
// ======================================================

// ------------------- Extraction des champs --------------------
function explode_csv2($string)//$string
{

return explode(";",$string);

}
$lala = array($rows);

$rows=array_map("explode_csv2", array_map("trim", $lala)); // ici pb du à $lala !!!

6 réponses

Reivax962 Messages postés 3672 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
6 janv. 2010 à 13:49
Bonjour,

Je ne comprends pas ce que tu veux avoir dans ta variable $lala.
Tel que je lis ton code, tu n'as pas besoin de $lala mais directement de $rows dans ton appel à la dernière ligne...

Xavier
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
6 janv. 2010 à 13:49
ton fichier est -il sur le serveur ?

si oui pourquoi utilisser file_get_contents ?

dans ce cas tu pourrais faire:

$array_contenu=array();
if(is_file($dir."/".$nom_du_fichier){
	$array_fichier=file($dir."/".$nom_du_fichier); //lecture du fichier ligne par ligne et stockage dans un array
	for($i=0;$i<sizeof($array_fichier);$i++){
		//parcours de l'array pour exploiter chaque ligne
		$array_ligne=explode(";",$array_fichier[$i]);
			//on empile dans l'array contenu
			$array_contenu[$i]= array();
			$array_contenu[$i]=$array_ligne;
	}

}

echo '<pre>';
print_r($array_contenu); //print_r c'est pour afficher tout un array et <pre> c'est pour la mise en forme
echo '</pre>';

//et ensuite tu accedes à tes valeurs par echo $array_contenu[x][y]


0
xavier
t'as raison mais lorsque je mets $rows (donc mon tableau divisé en lignes) il me dit Array to string conversion

Sinon je dois absolument utiliser file_get_contents (donc l'ouvrir comme une chaine) car la fonction mb_convert_encoding accepte que des chaines.

snif snif
0
En fait dans le fichier ouvert comme une chaine, j'arrive à extraire les lignes, mais pas les colonnes de chaque ligne, c'est chiant!
Peut-être il y a un moyen de faire un double explode()?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
6 janv. 2010 à 14:26
tu peux utiliser ma methode avec file() en convertissant ligne par ligne qui est une chaine avec mb_convert....
0
j'ai fait exactement comme tu m'as dit, et en affichant le contenu ca m'affiche

Array
(
[0] => Array
(
[0] => 1;champ2;;champ4;champ5;
[1] =>
)
Le but est de pouvoir extraire les champs "1", "champ2" qui sont séparés par des ";" tu vois?
Peut-etre faut-il un explode de plus ?

Merci pour ton aide qui m'est utile.
0
ah non c'est bon j'ai réussi !!! dans la fonction explode j'ai mis un espace au lieu d'un ";" Hehe
0
Derniere question

Ou est-ce que, dans le code, je dois placer $str = mb_convert_encoding($array_fichier[$i], "utf8", "windows-1251"); car je veux pouvoir travailler sur une ligne convertie en utf8.
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
6 janv. 2010 à 17:57
$array_contenu=array();
if(is_file($dir."/".$nom_du_fichier){
	$array_fichier=file($dir."/".$nom_du_fichier); //lecture du fichier ligne par ligne et stockage dans un array
	for($i=0;$i<sizeof($array_fichier);$i++){

              //convert utf8
            $array_fichier[$i] = mb_convert_encoding($array_fichier[$i], "utf8", "windows-1251");

		//parcours de l'array pour exploiter chaque ligne
		$array_ligne=explode(";",$array_fichier[$i]);
			//on empile dans l'array contenu
			$array_contenu[$i]= array();
			$array_contenu[$i]=$array_ligne;
	}

}

0