Aller au contenu principal

Fusionner des fichiers CSV

Ce fusionneur combine plusieurs fichiers CSV en un seul, en alignant les colonnes par nom d’en-tête plutôt que par position : l’en-tête de sortie est l’union des colonnes de chaque fichier, et les lignes sont remplies avec ce qu’elles ont, laissé vide là où elles n’ont rien. L’analyse et l’écriture se font dans votre navigateur ; les fichiers ne sont jamais envoyés.

100 % local

Fusionner des fichiers CSV en clair

Deux exports du même type d’enregistrement s’accordent presque jamais sur les colonnes — l’un a nom et email, l’autre nom et entreprise. Les empiler est la façon dont de mauvais fichiers sont créés : les lignes atterrèrent sous n’importe quelle entête se trouve au-dessus d’elles, et une colonne nommée email collecte silencieusement les valeurs d’entreprise de quelqu’un d’autre. La solution est d’unir les colonnes par nom et de remapper chaque ligne à travers son propre fichier d’en-tête.

C’est ce que fait ce fusionneur. L’en-tête de sortie est l’union ordonnée — les colonnes du premier fichier dans leur ordre, puis chaque nouvelle colonne dès qu’un fichier la montre. Chaque ligne est écrite contre cette union, en prenant les valeurs des colonnes que son propre fichier possède, le reste étant laissé vide. La sortie est RFC 4180 : des virgules, des champs entre guillemets uniquement si nécessaire, des fins de ligne CRLF.

Les fichiers restent locaux. Joignez-les avec le sélecteur de fichiers — l’API de fichiers du navigateur les lit dans la mémoire de cet onglet — ou collez-les séparés par une ligne ne contenant que ---. Rien n’est envoyé nulle part ; il n’y a pas d’étape d’envoi car elle n’existe pas.

Les règles de guillemets, CRLF et d’échappement que la sortie fusionnée respecte sont expliquées simplement dans le Guide RFC 4180 — vaut cinq minutes avant de construire un pipeline sur CSV.

Une fois les fichiers en une seule table, l’étape suivante habituelle est d’avoir des enregistrements qu’un script peut consommer, et le Convertisseur CSV vers JSON rend cela un suivi en un clic.

Union par nom, pas par position

La distinction semble académique jusqu’à ce qu’elle sauve un fichier. Supposons que le fichier un ait les colonnes nom, email et le fichier deux nom, entreprise. L’en-tête union est nom, email, entreprise — les colonnes du fichier un d’abord, puis la nouvelle colonne. La ligne d’Ada remplit email ; celle de Grace remplit entreprise ; chacune laisse l’autre vide. L’extrait ci-dessous montre exactement cette paire.

Comme le mapping passe par l’en-tête de chaque fichier, l’ordre des colonnes à l’intérieur d’un fichier est sans importance : le fichier deux pourrait arriver comme entreprise, nom et ses valeurs atteraient toujours correctement — c’est précisément ce que l’empilement positionnel fait de travers, et pourquoi un fusionneur qui suppose des en-têtes identiques est un piège.

Fichiers décalés, BOM et autres cas réels

Les exports réels sont décalés, et le fusionneur gère les cas courants au lieu de les rejeter :

  • Un BOM UTF-8 au début d’un fichier est supprimé — sinon un export Excel crée une première colonne invisible que personne ne peut matcher.
  • Les lignes vides sont ignorées, et un fichier vide est ignoré, pas fatal.
  • Les lignes manquant des cellules de fin deviennent des vides — les bords droits décalés sont normalisés, pas des erreurs.
  • Les échecs d’analyse sont rapportés par fichier et par ligne — fichier 2 : champ entre guillemets non terminé, ligne 4 — pour que le fichier problématique s’identifie.
  • Une en-tête qui répète un nom dans un seul fichier est lue uniquement à sa première position ; dédupliquez de telles en-têtes si la seconde copie porte des données.

À quoi ressemble la sortie — et ce qu’elle refuse de faire

La sortie est un document CSV unique : une seule ligne d’en-tête, puis les lignes de chaque fichier dans l’ordre. Les fins de ligne sont CRLF avec un CRLF final, par RFC 4180, et les champs sont entre guillemets uniquement si nécessaire : une virgule, un guillemet (doublé, comme l’exige la norme) ou un saut de ligne à l’intérieur, ou un espace de début ou de fin qu’un tableur sinon supprimerait.

Les valeurs passent telles quelles en texte — un numéro client 007 reste 007 — et rien n’est dédupliqué ou réordonné. Deux lignes identiques en entrée sont deux lignes en sortie : les réduire nécessite de décider ce qui fait que deux lignes sont identiques, et ce choix est le vôtre, pas celui de l’outil.

Questions fréquentes

Les fichiers CSV que j’attache sont-ils envoyés ?

Non. Les fichiers attachés sont lus avec l’API de fichiers du navigateur en chaînes de caractères dans cet onglet, fusionnés là, réécrits — rien ne quitte l’appareil. La page est servie avec connect-src 'self', donc un fetch vers une autre origine est refusé par le navigateur lui-même, et le panneau Réseau ne montre aucun trafic pendant qu’une fusion s’exécute. Le fait que les exports de paie restent locaux est le point.

Que se passe-t-il si mes fichiers ont des colonnes différentes, ou les mêmes colonnes dans un ordre différent ?

C’est précisément le cas pour lequel l’outil existe. Les colonnes sont unies par nom, chaque ligne est remappée à travers l’en-tête de son propre fichier, donc l’ordre des colonnes dans n’importe quel fichier est sans importance. Les lignes laissent simplement en blanc les colonnes que leur fichier n’avait jamais.

Les lignes en double sont-elles supprimées ?

Non. La fusion est un alignement structurel ; la déduplication est une décision séparée sur l’identité — chaque colonne, une clé, insensible à la casse ? — et se tromper supprime des données réelles. Les lignes identiques passent intactes ; appliquez votre propre règle ensuite si besoin.

Quels dialectes CSV le parseur accepte-t-il ?

Séparé par des virgules RFC 4180 : champs entre guillemets contenant des virgules, des guillemets et des sauts de ligne, guillemets doublés, et fins de ligne d’entrée CRLF ou LF. Les exports séparés par des points-virgules — le défaut d’Excel européen — sont analysés comme une seule colonne large, donc enregistrez-les d’abord avec des virgules. La sortie est toujours séparée par des virgules avec des fins de ligne CRLF.

Les lignes décalées sont-elles gérées ?

Une ligne plus courte que l’en-tête de son fichier contribue des vides aux colonnes manquantes ; une ligne plus longue a des restes sans nom — des cellules sans nom de colonne — qui sont ignorés. Les noms d’en-tête répétés dans un seul fichier sont lus à la première occurrence. Un traitement silencieux est réservé à ces cas ; une syntaxe malformée génère une erreur par fichier, par ligne.

Y a-t-il une limite de taille pour les fichiers ?

La limite pratique est la mémoire de l’onglet du navigateur. Chaque fichier est analysé par le moteur CSV du site en cours principal, qui refuse les entrées au-dessus de 8 MB avec un message clair plutôt que de geler la page — la même limite documentée que les autres outils CSV du site appliquent. Pour des exports typiques, c’est des dizaines de milliers de lignes par fichier.