Pb php lors de l'extraction d'un champ

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 !!!
Configuration: Windows Vista Internet Explorer 7.0

6 réponses

  1. 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
    1. 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]
      
      
      
      1. 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
        1. 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()?
          1. tu peux utiliser ma methode avec file() en convertissant ligne par ligne qui est une chaine avec mb_convert....
            1. 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.
            2. ah non c'est bon j'ai réussi !!! dans la fonction explode j'ai mis un espace au lieu d'un ";" Hehe
            3. 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.
          2. $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;
            	}
            
            }