12
votes

Importation de CSV qui a des pauses de ligne dans les champs réels

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.

É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.

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

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.


4 commentaires

Tant que les champs avec des pauses de ligne sont cités "foo \ nbar" Les alignements de la colonne ne doivent pas être affectés


Si vous devez coder comme \ n 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


6 Réponses :


3
votes

J'ai aussi eu ce problème et je n'ai trouvé aucun moyen de lire correctement les données.

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 ##### . Ensuite, j'ai importé les données et remplacées par les lampes.

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 "" , vous pouvez tout traiter entre deux "" comme une colonne (avec vérifier pour échapper " dans le contenu ).


0 commentaires

-1
votes

Oui, vous devez trouver cette virgule et remplacer par certains caractères spéciaux tels que la combinaison de {() {()} et les remplacer enfin avec , que vous recherchez.

espoir que cela vous aide.


1 commentaires

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




1
votes

Ma solution est la suivante: xxx

http. : //php.net/manual/fr/funcunk.nl2br.php

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.


0 commentaires

1
votes

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.


0 commentaires

2
votes

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.

$ parsedcsv = preg_replace ('/ (, | \ n | ^) "(?: ([^ \ n"] *) *) *) *) * "/" , '$ 1 "$" $ 2 $ 3 "', $ parsedcsv);

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 , ou être placé au début d'une nouvelle ligne (ou première ligne).

Exemple:

Field1, "Field2-Part1 \ nfield2-Part2", champ3

Ici, le \ N est remplacé par unespace de blancheur afin que le résultat soit:

Field1, "Field2-Part1 Field2-Part2", Field3

La regex devrait également gérer plusieurs chevrefeaux.

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é).


0 commentaires