Pb php lors de l'extraction d'un champ

maksuha -  
Alain_42 Messages postés 5413 Statut Membre -
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. Reivax962 Messages postés 3742 Statut Membre 1 011
     
    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
  2. Alain_42 Messages postés 5413 Statut Membre 904
     
    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
  3. maksuha
     
    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
  4. maksuha
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Alain_42 Messages postés 5413 Statut Membre 904
     
    tu peux utiliser ma methode avec file() en convertissant ligne par ligne qui est une chaine avec mb_convert....
    0
    1. maksuha
       
      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
    2. maksuha
       
      ah non c'est bon j'ai réussi !!! dans la fonction explode j'ai mis un espace au lieu d'un ";" Hehe
      0
    3. maksuha
       
      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
  7. Alain_42 Messages postés 5413 Statut Membre 904
     
    $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