Français

Données et feuilles de calcul · CSV Nettoyeur

Comment un analyseur CSV gère les guillemets, les virgules intégrées et les nouvelles lignes dans les champs

· Comment ça marche

csv analyse formats de données

Un chemin d'état de l'analyseur conservant les virgules entre guillemets, les guillemets doubles et les sauts de ligne intégrés à l'intérieur des champs
Illustration vectorielle originale de ToolAcre

Le fractionnement sur virgules fonctionne jusqu'à ce qu'un champ contienne une virgule, une citation ou un saut de ligne. Cet article explique la petite machine à états qu'un véritable analyseur CSV utilise, pourquoi les règles de citation existent et ce que fait un outil de réparation lorsque la citation est rompue.

Un champ d'adresse avec une virgule décalé chaque colonne vers la droite - pourquoi le fractionnement naïf n'est pas analysé

Le fractionnement d'une ligne à chaque virgule échoue dès qu'une adresse postale, une note ou une description de produit contient ce caractère. Le séparateur ne termine un champ que lorsque l'analyseur se trouve en dehors d'un champ cité. Entre guillemets, le même octet appartient à la valeur et doit atteindre l'aperçu sans modification.

ToolAcre le prouve avec des tests plutôt que de supposer que CSV est un simple texte. Un fichier point-virgule contenant des virgules à l'intérieur de notes entre guillemets est toujours détecté comme délimité par des points-virgules car chaque candidat est analysé en lignes avant que sa forme rectangulaire ne soit notée. La ponctuation brute ne décide jamais du dialecte.

Les règles de citation : les champs contenant le délimiteur, les guillemets ou les nouvelles lignes sont entourés de guillemets doubles et les guillemets internes sont doublés.

Un champ contenant le délimiteur choisi, un guillemet double, un saut de ligne ou un retour chariot est cité lors de la sérialisation. Un guillemet littéral à l’intérieur d’un champ entre guillemets est représenté par deux guillemets adjacents. Lors de l'analyse, cette paire apporte une citation à la cellule et ne ferme pas le champ.

Les guillemets n'ouvrent un état cité que lorsqu'ils apparaissent au début d'un champ autrement vide. Dans une valeur non citée telle que le tube 12", la citation reste une donnée littérale. Ce choix d'implémentation est testé et empêche une marque de mesure au milieu du texte d'avaler les colonnes suivantes.

Un analyseur en tant que machine à états : guillemets intérieurs versus guillemets extérieurs, et comment un caractère à la fois décide où se termine un champ

La boucle principale suit un champ actuel, une ligne actuelle et un état `inQuotes`. En dehors des guillemets, le délimiteur pousse un champ et CR, LF ou CRLF pousse une ligne. À l'intérieur des guillemets, chaque caractère est ajouté, à l'exception d'un guillemet, qui forme une paire d'échappement ou sort de l'état cité.

Cette progression sur un caractère explique pourquoi une simple expression régulière ou un fractionnement de ligne est fragile. Le fait qu'une nouvelle ligne termine un enregistrement dépend de la saisie précédente, et le fait qu'une citation ferme le champ dépend de la citation suivante. L'analyseur transmet exactement cet état minimal à travers la chaîne.

Nouvelles lignes intégrées : pourquoi une ligne peut s'étendre sur plusieurs lignes et pourquoi les outils basés sur les lignes, tels que grep ou wc, comptent mal les enregistrements.

Un champ entre guillemets peut contenir LF, CRLF ou un seul CR, et ces caractères restent à l'intérieur de la valeur. Par conséquent, un enregistrement logique peut occuper plusieurs lignes d'affichage dans un éditeur de texte. Compter les lignes physiques avec une commande orientée ligne ne compte pas nécessairement les lignes de données.

Après le guillemet de clôture, le prochain délimiteur ou fin d'enregistrement reprend sa signification structurelle. Les tests de ToolAcre affirment à la fois le LF et le CRLF intégrés, puis vérifient qu'une seule ligne a été produite. Ce comportement n'est pas déduit d'une étiquette RFC ; il est exercé directement par la machine à états expédiée.

Citations brisées : citations déséquilibrées qui engloutissent le reste du fichier et comment un outil de réparation re-cite les champs de manière cohérente

Le plan promettait une réparation avec un devis, mais un devis non fermé est intrinsèquement ambigu. ToolAcre rapporte `UNCLOSED_QUOTE` par rapport à la ligne où l'état cité a commencé et lit tout ensuite dans un seul champ. Il n’invente pas de position finale ni ne cite à nouveau les enregistrements prévus.

Cet échec conservateur préserve le texte consommé pour inspection et évite de prétendre savoir si une citation ultérieure ou une nouvelle ligne était censée être des données. Corrigez la source ou régénérez l'export, puis rechargez. La sérialisation peut normaliser une table analysée avec succès ; il ne peut pas récupérer les limites de lignes que la source mal formée a rendues méconnaissables.

Les citations brisées sont signalées mais non réparées ; un champ non fermé consomme le texte restant

Utilisez `name,note` comme en-tête, puis une ligne avec Ada et une note contenant une virgule plus un saut de ligne, et une autre dont la note est `She said "hi"`. Dans la source CSV, citez la longue note et écrivez le guillemet intérieur comme `""hi""`. L'analyseur renvoie deux lignes de données et conserve les deux caractères spéciaux.

Lorsqu'ils sont sérialisés avec un minimum de guillemets, les noms simples n'ont pas besoin de guillemets, tandis que les champs de note sont cités car ils contiennent des caractères structurels. L'analyse à nouveau de cette sortie donne le même en-tête et les mêmes cellules même si les guillemets sources redondants ont disparu. L'égalité des données, et non le style octet par octet, définit cet aller-retour.

Ce que cela ne couvre pas : les dialectes qui utilisent des barres obliques inverses et les heuristiques pour deviner l'intention lorsque la citation est vraiment ambiguë

Les dialectes d'échappement de barre oblique inverse sont en dehors de l'analyseur. Une barre oblique inverse avant une citation n'a ici aucune signification particulière pour la machine à états ; il reste du texte, tandis que la citation est interprétée selon les règles des guillemets doubles. L'outil refuse également de deviner l'intention une fois qu'une cotation d'ouverture reste inégalée.

Ces limites sont importantes lors de l'importation d'un vidage de base de données configuré pour une autre convention d'échappement. Identifiez le dialecte du producteur avant le chargement ou exportez avec des citations de style RFC. Un analyseur qui reconnaît silencieusement plusieurs règles d'échappement incompatibles peut transformer des barres obliques inverses littérales en syntaxe de contrôle et masquer une incompatibilité.

Respectez les guillemets et les lignes restent intactes - comment la réparation des citations de ToolAcre CSV Cleaner produit un fichier que les analyseurs standard lisent correctement

Le respect de l'état cité conserve les délimiteurs et les fins d'enregistrement à l'intérieur des cellules auxquelles ils appartiennent. ToolAcre gère également trois formulaires de fin de ligne, supprime une nomenclature UTF-8 de début et signale les incohérences de largeur de ligne. Ces comportements sont des parties indépendantes d’une lecture structurelle plutôt qu’un ensemble d’astuces de recherche et de remplacement.

Après une analyse valide, la sérialisation double les guillemets intégrés et cite tout champ nécessitant une protection, avec une sortie CRLF par défaut. Après un devis non clôturé invalide, arrêtez et réparez à partir des preuves sources. L'outil peut standardiser les cellules connues ; il ne prétend pas reconstruire une table inconnaissable.