PHP fgetcsv() délimiteur
Quant à fgetcsv()
de la documentation, il y a quelques paramètres à l'intérieur de fgetcsv()
fonction: Poignée, longueur, séparateur, enceinte, et de s'échapper.
Maintenant, j'ai 2 questions:
- Ce n'boîtier faire exactement?
- J'ai un fichier csv avec 5 colonnes par ligne. Imaginez quelque chose comme ceci: 1,2,3,4,5
Donc les indices vont de 0 à 4. Mais chaque fois que je veux obtenir la date à partir de l'index 4, une valeur vide retourne. À moins que j'ai mis une virgule après elle (par remplissage d'une colonne supplémentaire après ce qui fait que le contenu comme ceci: 1,2,3,4,5,6 ). Comment puis-je résoudre ce problème ? Il semble qu'il y a un problème en raison de l'absence de virgule après le dernier élément de chaque ligne du fichier csv!
Pourriez-vous collez le fichier csv quelque part? Et peut-être nous montrer certaines conditions une partie de votre code.
OriginalL'auteur Mohammad Saberi | 2012-08-22
Vous devez vous connecter pour publier un commentaire.
1. Le
enclosure
paramètre est le caractère de l'encapsule les données d'un champ spécifique, ou "index". Par défaut, le paramètre est un"
, ce qui signifie que vous pouvez "enfermer" des chaînes dans"
caractères.Exemple:
2. Par un commentaire, vous appelez
fgetcsv($handle, 10000, ',')
. Il est possible, peut-être, que la /les ligne(s) que vous êtes en train de lire de plus de 10 000 caractères. Essayez de changer la longueur de0
, qui sera "no limit" et voir si cela aide. Une autre solution serait d'essayer d'emballer la valeur de la colonne dans les doubles guillemets.while (($data = fgetcsv($handle, 10000, ',')) !== FALSE) {
et aller chercher leurs valeurs comme$title = $data[0];
OriginalL'auteur newfurniturey
Boîtier est le caractère enfermant le terrain. C'est un délimiteur, de une sorte.
Par exemple
hello,world
a une virgule comme champ délimiteur, et n'a pas de texte séparateur, tandis que"hello","world"
a une citation d'un signe en tant que texte délimiteur. Certains systèmes utilisent une délimité et undelimited valeurs pour indiquer le texte et les champs numériques, respectivement (je crois que Microsoft Excel). Cela permet un champ de contenir le séparateur de champ dans sa valeur:Certains autres systèmes de joindre les valeurs contenant le séparateur de champ ou de valeurs contenant des espaces, ce qui signifie que, sur ces systèmes un undelimited valeur n'est pas nécessairement numérique.
Si vous avez un "trivial" cas - undelimited valeurs, sans échappé à champ-séparateurs à l'intérieur de valeurs (c'est à dire, pas de "Un,firstpartB\,secondpartB,C' stuff) - vous pouvez sauter CSV conversion complètement et d'exécuter
ou
Je n'arrive pas à reproduire le problème que vous rencontrez; pourrait-il être lié à un codage différent de fins de ligne (c'est à dire, CRLF au lieu de LF)?
Dans un pincement, vous pouvez diviser
fgetcsv
dans les deux composantesfgets
etstr_getcsv()
, de la manipulation de la ligne entre les appels (avectrim
, ou si le pire arrive au pire, en ajoutant le manque des virgules).OriginalL'auteur LSerni
Il fonctionne pour moi sur ce chemin:
OriginalL'auteur Fábio Dutra