Pb php lors de l'extraction d'un champ
maksuha
-
Alain_42 Messages postés 5361 Date d'inscription Statut Membre Dernière intervention -
Alain_42 Messages postés 5361 Date d'inscription Statut Membre Dernière intervention -
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 !!!
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 !!!
A voir également:
- Pb php lors de l'extraction d'un champ
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Erreur lors de l'extraction des fichiers de support défaillance irrémédiable ✓ - Forum Windows 10
- Le nom du champ de tableau croisé dynamique n'est pas valide ✓ - Forum Excel
- Champ lexical de village ✓ - Forum Études / Formation High-Tech
6 réponses
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
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
ton fichier est -il sur le serveur ?
si oui pourquoi utilisser file_get_contents ?
dans ce cas tu pourrais faire:
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]
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
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
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()?
Peut-être il y a un moyen de faire un double explode()?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
tu peux utiliser ma methode avec file() en convertissant ligne par ligne qui est une chaine avec mb_convert....
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.
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.
$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; } }