1 votes

Suppression des virgules supplémentaires dans un fichier CSV sans autre source de données

Nous disposons d'une grande base de données contenant des adresses de clients qui a été exportée d'une base de données SQL vers CSV. Si le nom d'une entreprise comporte une virgule, cela perturbe (comme on peut s'y attendre) l'ensemble de la base de données.

Malheureusement, il y a tellement de cas de ce genre (et de virgules dans la deuxième ligne d'adresse) que l'ensemble du CSV (~100k lignes) est un énorme désordre. La solution évidente est d'exporter à nouveau les données dans un format différent, sans virgule, mais l'accès à cette base de données SQL est plus ou moins impossible pour le moment... J'ai essayé quelques outils et j'ai réfléchi à la façon de combiner les choses pour résoudre ce problème, mais je me suis dit que demander ne pouvait pas faire de mal. Merci de votre compréhension.

3voto

soegaard Points 6541

En tant que programmeur, mon approche serait de créer une petite application qui analyse le fichier ligne par ligne et vérifie le nombre de virgules qui se trouvent dans la ligne (vous devriez, je suppose, savoir combien de virgules il y a dans une ligne correcte).

S'il correspond à la valeur attendue, le résultat est enregistré dans un nouveau fichier, les tabulations remplaçant les virgules.

S'il ne correspond pas, il affiche la ligne avec une option permettant d'exclure les virgules qui doivent être converties en tabulations et la sortie est basée sur cette sélection.

Vous obtiendrez alors un fichier séparé par des tabulations avec des virgules dans certains champs d'adresse.

1voto

kdo Points 377

D'après mon expérience, essayer de résoudre ce problème à partir de vos données actuelles prendra le temps que vous voudrez, et il n'y a aucune garantie que votre résultat soit identique aux données initiales. Il serait peut-être plus simple d'attendre que la base de données soit à nouveau disponible.

Le problème fondamental est que la conversion en un simple format CSV n'est pas bijective - il n'y a tout simplement pas de correspondance directe entre le fichier CSV et les données d'origine. Vous pouvez essayer de réduire ce problème en utilisant certaines heuristiques, mais cela nécessitera une certaine quantité de script ou de programmation. Cela dépend également de la plateforme et des outils dont vous disposez et, surtout, de vos compétences.

Il se peut que vous ayez des enregistrements dont aucune valeur de champ ne comporte de virgule. Extrayez-les d'abord, même s'il y en a peu, c'est un point de départ.

Il se peut que vous trouviez une heuristique pour distinguer au moins certaines des virgules "intégrées" par des virgules de séparation de champ.

Vous pouvez essayer d'identifier les valeurs de données des colonnes caractéristiques, par exemple l'adresse électronique, le numéro de téléphone, etc. À partir de là, vous pourriez réduire le nombre de colonnes qui nécessitent un examen plus approfondi.

Procéder ainsi par étapes devrait vous permettre de transformer vos données dans un format mieux adapté, par exemple en utilisant des tabulations comme séparateurs de champs.

Vous devriez également envisager de n'extraire que certaines colonnes et une valeur clé unique (numéro d'enregistrement ?) dans un premier temps, puis de faire correspondre les différents éléments.

Notez, documentez, gardez une trace de ce que vous faites. Sinon, vous aggraverez la situation au lieu de l'améliorer.

Bonne chance !

1voto

jpm Points 5933

La première solution consiste à attendre d'avoir à nouveau accès à la base de données.

Si cela n'est pas pratique, Excel est votre ami CSV (si vous n'êtes pas un programmeur).

Voici une méthode Excel que j'ai utilisée :

  1. Importez le CSV dans Excel de manière à ce que les lignes de votre fichier comportant le nombre correct de virgules se retrouvent dans le nombre correct de cellules de la ligne Excel. Par exemple, si vous avez sept champs comportant sept virgules correctement placées, Excel les analysera dans sept cellules avec les paramètres d'importation CSV corrects.

  2. Prenez maintenant votre feuille Excel et allez à la ligne supérieure et à une cellule à droite de la dernière cellule d'une ligne correcte. Par exemple, si vous avez 7 champs, ils s'étendront de "A" à "G". Allez à la colonne "H"

  3. Sur le Mac, appuyez sur Command + flèche vers le bas ; Sur un PC, Ctr + flèche vers le bas. Cela permet de sauter tous les espaces vides et de s'arrêter à la première cellule contenant du contenu. Fixez manuellement la ligne et passez à la suivante.

  4. Si vous avez des lignes qui contiennent trop peu de champs (virgules), vous pouvez les trouver en allant à la première cellule à gauche de la dernière cellule de la cellule correcte. Par exemple, si vous avez une ligne correcte qui s'étend de A à G, allez à la colonne F et répétez l'étape 3.

Avec 100 000 lignes, cela n'est possible que si un pourcentage élevé de vos lignes est correct, mais vous serez surpris de la rapidité avec laquelle vous pouvez réparer le fichier de cette manière. Vous pouvez maintenant utiliser Excel pour enregistrer le fichier sous une forme correcte de CSV.

Bonne chance...

0voto

VolkA Points 10297

Il n'y a pas de solution évidente à ce problème car si les champs contenant des virgules ne sont pas marqués d'une manière spéciale (et vous ne l'avez pas mentionné), il est fondamentalement impossible pour un programme informatique de déterminer si une virgule se trouve dans l'adresse ou non. Vous pouvez toujours utiliser certaines heuristiques (comme "si vous avez un espace avant la virgule, c'est probablement dans l'adresse") pour les lignes contenant des virgules supplémentaires, mais il s'agit d'heuristiques, et elles sont volonté manquer. (L'heuristique "espace" est de toute façon un bon point de départ).

Je ne peux vous aider qu'en écrivant un Shell Shell qui recherchera les lignes erronées et vous proposera de les éditer. Si vous avez besoin de quelque chose comme ça, postez une note.

0voto

jperry1147 Points 101

Je sais que cela peut sembler un peu basique, mais cela m'a sauvé la mise. S'il s'agit d'un nom, il s'agit probablement d'une virgule suivie d'un espace. Mais un fichier CSV exporté n'aura pas d'espace après la virgule entre les colonnes. Par conséquent, si vous effectuez une recherche et un remplacement pour " , ", vous pourrez vous débarrasser des virgules indésirables.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X