Explode fichier.csv

cs_GregL Messages postés 5 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 14 décembre 2005 - 12 déc. 2005 à 18:23
WhiteDwarf Messages postés 510 Date d'inscription samedi 29 décembre 2001 Statut Membre Dernière intervention 23 mai 2008 - 15 déc. 2005 à 11:47
Hello ,



Je ne connais pas grand chose au PHP et il y'a quelque chose qui
m'échappe lorsque que je veux ressortir chaque chaîne séparé par un
point virgule d'un fichier .csv.



Comme illustré ci-dessous , je suis obligé de passer par implode () si
je veux pouvoir ressortir chaque variable $tab correctement et je ne
saisis pas pourquoi ....



$path= "fichier.csv";

$file = implode ('',file("$path"));

$tab = explode (';' , $file);

print_r ($tab);



Si je fais :

$path= "fichier.csv";

$tab = explode (';' ,file ("$path"));

print_r ($tab);

Je tombe sur :

Notice : Array to string conversion in h:\... on line XXX


Array
(
[0] => Array
)



Par quoi faudrait-il que je remplace la fonction file() pour éviter
cela et est-ce que quelqu'un pourrait m'expliquer pourquoi ...



Merci d'avance.

5 réponses

WhiteDwarf Messages postés 510 Date d'inscription samedi 29 décembre 2001 Statut Membre Dernière intervention 23 mai 2008
13 déc. 2005 à 01:00
tu peu la remplacer en ouvrant le fichier et le chargant dans une variable :

<?php
$fp = fopen("fichier.cvs",r);
$data = fread($fp,filesize("fichier.cvs"));
?>

et ensuite tu traite la variable $data...


----------------------
La lumière étant plus rapide que le son, un homme peu paraître brillant avant qu'il se mette a parler
-----------------
0
cs_GregL Messages postés 5 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 14 décembre 2005
13 déc. 2005 à 23:02
Je te remercie c'est effectivement une solution mais malheureusement ça
ne fonctionnait pas car en exportant un tableau excel au format csv ,
Excel ne cloture pas les lignes par un point virgule donc je me
retrouvais avec la dernière valeur de la ligne et la première de la
ligne suivante pour une seule clé donc j'ai dû faire autrement .



J'ai trouvé cette fonction dans un bouquin :

function my_fgetcsv($filename,$sep)

{

$arr=file($filename);

$resultat=array("");

foreach ($arr as $elem)

{

$str=str_replace("*"," " ,$elem);

$buf=explode ($sep,$str);

$resultat=array_merge ($resultat,$buf);

}

array_shift($resultat);

return $resultat;

}

puis j'ai ajouté ça



$arr=my_fgetcsv("fichier.csv",";");

while ($val=each($arr))

{

echo "clé :",

"",$val[key],"";

echo " valeur : ","",$val[value],"","
";

}



Ca fonctionnait parfaitement avec EasyPHP1.6 mais malheureusement plus avec la 1.8 ...

Notice: Use of undefined constant key - assumed 'key'



J'en déduis que le probléme provient de register_globals
qui est passé à OFF .Je serais incapable de contourner ce problème pour
le moment mais je vais commencer à me renseigner . Si vous avez
des suggestions n'hésitez pas , Merci d'avance ...
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
13 déc. 2005 à 23:42
" while ($val= each($arr))
{
echo "clé :",
" ",$val[key]," ";
echo " valeur : ","",$val[value],"","
";
}"

Heu .... ?

foreach ( $arr as $key =>$val ) {
echo 'clé : '.$key.'';
echo 'valeur : '.$val.'
';
}

Pas plus simple ?
0
cs_GregL Messages postés 5 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 14 décembre 2005
14 déc. 2005 à 14:45
En effet ,oui mais ça me fait contourner le problème alors que j'aurais
bien voulu savoir comment redéfinir la constante [key] ...
0

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

Posez votre question
WhiteDwarf Messages postés 510 Date d'inscription samedi 29 décembre 2001 Statut Membre Dernière intervention 23 mai 2008
15 déc. 2005 à 11:47
"J'en déduis que le probléme provient de register_globals qui est passé à OFF .Je serais incapable de contourner ce problème pour le moment mais je vais commencer à me renseigner . Si vous avez des suggestions n'hésitez pas , Merci d'avance ...
"

Si t'a ce problème en utilisant un serveur comme EasyPHP, donc apache, il faut que tu reconfigure apache et tu fais passer register_global à on...


----------------------
La lumière étant plus rapide que le son, un homme peu paraître brillant avant qu'il se mette a parler
-----------------
0
Rejoignez-nous