Je travaille avec un fichier CSV et PHP5 mais je ne comprends pas très bien ce que je vois. Le fichier est la suivante quand je l'ouvre dans un éditeur de texte:Fgetcsv lecture de ligne initiale
"Jun 23,2010 21:40","City1","Location1","0 0 0 "
"Jun 23,2010 21:41","City2","Location1","0 0 0 "
Ce que je reçois en sortie de ce code:
while (($data = fgetcsv($handle, 1000, ",","\"")) !== FALSE) {
$num = count($data);
echo "<p> $num fields in line $row: <br /></p>\n";
$row++;
for ($c=0; $c < $num; $c++) {
echo $data[$c] . "<br />\n";
}
}
fclose($handle);
Est-ce sortie:
5 fields in line 1:
"Jun 23
2010 21:40"
City1
Location1
0 0 0
4 fields in line 2:
Jun 23,2010 21:41
City2
Location1
0 0 0
Comme vous pouvez le voir, sur la première ligne, fgetcsv saute le caractère de l'enceinte et lit la virgule comme le premier champ, alors que le second li ne lit correctement et ainsi de suite toutes les lignes.
Donc, est-ce que je manque quelque chose ou est-ce un bug, et si c'est un bug, quelles seraient les solutions possibles autres que la réécriture du fichier original?
après avoir vérifié autour du code, je pense que vous avez raison et quelque chose dans le fichier réel pourrait être foiré le fgetcsv.J'ai copié et collé le fichier entier dans un éditeur de texte à un nouveau fichier, a couru cela et pas de problèmes. Le fichier est en train d'être écrit par un script iMacoros et, d'une manière ou d'une autre, il bousille le format au niveau binaire car dans le texte ils ont l'air identiques. – ruskiar
Dug autour un peu plus et il s'avère que fgetcsv n'aime pas l'encodage UTF-8, donc après une petite conversion de fichier, tout fonctionne comme un charme. – ruskiar