J'utilise PHP pour importer un fichier CSV, qui provient d'une feuille de calcul Excel. Certains champs contiennent des pauses de ligne en eux, alors lorsque je rouvrez le CSV dans une feuille de calcul Excel / Open Office, il est mal interprété lorsque la ligne se casse devrait se produire. P>
Également dans mon script, en utilisant FgeCSV pour passer à travers chaque ligne, il est incorrect de la rupture de la ligne là où elle ne devrait pas être. P>
Je pourrais nettoyer manuellement les données mais a) qui prendrait des âges comme son fichier de ligne 10K, et b) les données sont exportées d'un logiciel existant de clients P>
Des idées sur la manière de résoudre automatiquement cela sur le processus d'importation? J'aurais pensé que la délimitation des champs aurait trié mais ce ne serait pas. P>
6 Réponses :
J'ai aussi eu ce problème et je n'ai trouvé aucun moyen de lire correctement les données. P>
Dans mon cas, c'était une importation unique, j'ai donc fait un script qui recherchait toutes les pauses de ligne dans une colonne et l'a remplacée par quelque chose comme Si vous avez besoin d'une importation régulière, vous pouvez vous écrire propre CSV-Parser, qui gère le problème. Si les colonnes de texte sont dans ##### code>. Ensuite, j'ai importé les données et remplacées par les lampes. P>
"" code>, vous pouvez tout traiter entre deux
"" code> comme une colonne (avec vérifier pour échapper
" code> dans le contenu ). p>
Oui, vous devez trouver cette virgule et remplacer par certains caractères spéciaux tels que la combinaison de espoir que cela vous aide. p> {() {()} code> et les remplacer enfin avec
, code> que vous recherchez. p>
désolé mais cela ne vous aide pas du tout, s'il vous plaît réellement lire la question complète avant de répondre
La réponse acceptée n'a pas résolu le problème pour moi, mais j'ai finalement trouvé cette bibliothèque de parser CSV sur Google Code qui fonctionne bien pour les champs multilignes des CSV. p>
parsecsv-for-php:
https://github.com/parsecsv/parsecsv-for-phphp p>
À des fins historiques, le projet original de la maison était:
http://code.google.com/p/parsecsv-for-php/ a> p>
+1 C'est jusqu'à présent le meilleur analyseur autour! mieux que str_getcsv ou pareil. Mes données contenaient des HTML et des nouvelles lignes dans les champs. C'est le seul analyseur qui a bien compris! Merci!
C'est un peu triste qu'il est si difficile de trouver un analyseur précis pour l'un des formats les plus courants pour l'une des langages de programmation les plus largement utilisés. Je suppose que c'est partiellement car il n'y a pas de norme officielle, mais les pauses de la ligne à l'intérieur des valeurs citées sont définitivement quelque chose qu'un analyseur CSV devrait pouvoir gérer.
Cela devrait être la réponse approuvée. Merci
J'ai cherché des semaines et cette réponse a apporté ma recherche à une fin. Cela fonctionne toujours en 2021!
Ma solution est la suivante: http. : //php.net/manual/fr/funcunk.nl2br.php p> Une fois que vous arrivez au niveau de la cellule individuel (chaîne), exécutez-le sur la chaîne et convertira les chevrefreaux au HTML se casse pour vous. P> p>
Bien qu'il s'agisse d'une vieille question, la réponse pourrait être toujours pertinente pour ppl. Il y a actuellement la nouvelle bibliothèque (cadre indépendant) http://csv.thephplpleague.com/ qui prend en charge NL caractères dans champs ainsi que du filtrage. P>
C'est un vieux fil mais j'ai rencontré ce problème et je l'ai résolu avec une regex afin que vous puissiez éviter une bibliothèque juste pour cela. Ici, le code est en PHP mais il peut être adapté à une autre langue. P>
Ces solutions supposent que les champs contenant un chevichet sont enfermés par des citations doubles, ce qui semble être une hypothèse valide, du moins pour ce que j'ai vu jusqu'à présent. En outre, les citations doubles doivent suivre un Exemple: P>
Ici, le \ N est remplacé par unespace de blancheur afin que le résultat soit: p>
La regex devrait également gérer plusieurs chevrefeaux. P>
Cela pourrait ne pas être efficace si le contenu est trop grand, mais cela peut aider à de nombreux cas et que l'idée peut être réutilisée, peut-être optimiser en faisant cela pour les plus petits morceaux (mais vous devez gérer les coupes à la solution. tampon tamponné). p> $ parsedcsv = preg_replace ('/ (, | \ n | ^) "(?: ([^ \ n"] *) *) *) *) * "/" , '$ 1 "$" $ 2 $ 3 "', $ parsedcsv); code> p>
, code> ou être placé au début d'une nouvelle ligne (ou première ligne). P>
Field1, "Field2-Part1 \ nfield2-Part2", champ3 code> p>
Field1, "Field2-Part1 Field2-Part2", Field3 Code> P>
Tant que les champs avec des pauses de ligne sont cités
"foo \ nbar" code> Les alignements de la colonne ne doivent pas être affectés
Si vous devez coder comme
\ n code> dans les champs CSV. Vous aurez besoin d'un lecteur personnalisé pour annuler les dommages à l'exportation. Regardez à travers PHP.NET/FgetCSV , mais vous devrez probablement rechercher ou écrire un.
duplicaté possible ( Stackoverflow.com/Questtions/3278375/... )
Xzyfer, cette solution ne fonctionnera pas comme si j'ai besoin de la possibilité de démarrer à une ligne particulière à partir du pointeur de fichier, car le chargement de 15 Mo de 15 Mo dans une chaîne sur un serveur de production ne va pas fonctionner :( Merci quand même