3 votes

fgetcsv renvoie trop d'entrées

J'ai le code suivant :

while (!feof($file)) {
        $arrayOfIdToBodyPart = fgetcsv($file,0, "\t");
            if (count($arrayOfIdToBodyPart)==2){

le problème est que le contenu du fichier ressemble à ça :

39      ankle
40      tibia
41      Vastus Intermedius

et ainsi de suite

parfois, le test dans le if montrera trois avec la première étant le numéro, la deuxième étant le nom, et la troisième étant juste... emtpy.

Cela fait échouer le bloc if, et me rend triste. Je sais que je peux simplement faire en sorte que le bloc if teste pour >=2, mais y a-t-il un moyen de faire en sorte qu'il reconnaisse simplement le fait qu'il y a deux éléments ? Je n'aime pas que le fgetcsv trouve des caractères "mystérieux" à la fin de la ligne.

S'agit-il d'un serveur Unix exécutant une erreur de fichier basée sur Windows ? Si c'est le cas, et que j'utilise un serveur ubuntu sans dos2unix, où puis-je le trouver ?

0voto

Alex Howansky Points 16820

Vous avez probablement des tabulations à la fin d'une ligne :

value<tab>value<tab><newline>

Si c'est le cas, dos2unix ne vous aidera pas. Vous devrez peut-être faire quelque chose comme lire chaque ligne dans une variable, trim() la variable, et ensuite utiliser str_getcsv() pour la diviser.

0voto

Dan F. Points 894

Est-il possible que vous ayez une tabulation à la fin de ces lignes ? Elles sont invisibles et souvent difficiles à repérer... vous pourriez vouloir vérifier.

De plus, si vous travaillez avec des fichiers csv, alors que vous exécutez Windows localement et que le serveur est unix, j'ai trouvé cette ligne :

ini_set('auto_detect_line_endings', true);

évite bien des maux de tête.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X