Insertion d'un caractère dans une chaîne
nettpod
Messages postés
7
Date d'inscription
Statut
Membre
Dernière intervention
-
nettpod Messages postés 7 Date d'inscription Statut Membre Dernière intervention -
nettpod Messages postés 7 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Mon problème viens du format des fichiers CSV
Un fichier CSV c'est un fichier tableau dont les colonnes sont séparées par des ';' et les lignes par des retours chariots. Quelque fois (et c'est mon cas), les champs sont délimités par des '"'.
Exemple : "Valeur 1";"Valeur 2";"Valeur 3"
Si certains champs sont nuls ont peut avoir "Valeur 1";"";Valeur 3"
Mon problème est que dans ces valeurs, j'ai parfois valeurs qui se terminent par ", donc j'obtiens :
"Valeur 1";"Valeur 2"";"";"Valeur 4"
Le format CSV considère les doubles " comme caractère spécial, non pas comme un séparateur de champ, il faut donc doubler les " quand elles ne sont pas un séparateur de champs
J'ai donc écrit quelques lignes en java pour ajouter un " quand ce n'est pas un séparateur de champs :
(je reçois une ligne en String et je la retourne une fois modifier si nécessaire)
ça marche par exemple pour "Valeur 1""|""|""|""
mais si je rajoute encore un champ vide "Valeur 1""|""|""|"" ça me fait une boucle infinie et je ne vois pas du tout d'où viens le problème.
Ce n'est pas moi qui m'occupe de la création des fichiers (donc je ne choisi pas la forme du fichier) et il y a parfois plusieurs milliers de lignes, impossible d'y faire à la main.
Tout ce que je demande c'est de rajouter un " quand il y en a un en fin de champs, si quelqu'un a une solution je suis preneur :)
Si je n'ai pas été clair ou que vous avez des questions supplémentaires je répondrais.
Par avance merci ;)
Mon problème viens du format des fichiers CSV
Un fichier CSV c'est un fichier tableau dont les colonnes sont séparées par des ';' et les lignes par des retours chariots. Quelque fois (et c'est mon cas), les champs sont délimités par des '"'.
Exemple : "Valeur 1";"Valeur 2";"Valeur 3"
Si certains champs sont nuls ont peut avoir "Valeur 1";"";Valeur 3"
Mon problème est que dans ces valeurs, j'ai parfois valeurs qui se terminent par ", donc j'obtiens :
"Valeur 1";"Valeur 2"";"";"Valeur 4"
Le format CSV considère les doubles " comme caractère spécial, non pas comme un séparateur de champ, il faut donc doubler les " quand elles ne sont pas un séparateur de champs
J'ai donc écrit quelques lignes en java pour ajouter un " quand ce n'est pas un séparateur de champs :
(je reçois une ligne en String et je la retourne une fois modifier si nécessaire)
public static String ajoutGuillemets(String contenu) { String chaineDeRecherche = contenu; String chaineTampon = contenu; char recherche[] = {'"', '"', '|', '"'}; int i = contenu.indexOf(String.valueOf(recherche)); //Recherche de toutes les occurences et ajout d'un '"' quand c'est nécessaire while (i != -1) { chaineDeRecherche = contenu.substring(i + 4); if (contenu.charAt(i - 1) != '|') { chaineTampon = contenu.substring(0, i); contenu = chaineTampon.substring(0, i) + String.valueOf('"') + String.valueOf(recherche) + chaineDeRecherche; } i = chaineDeRecherche.indexOf(String.valueOf(recherche)); } return contenu; }
ça marche par exemple pour "Valeur 1""|""|""|""
mais si je rajoute encore un champ vide "Valeur 1""|""|""|"" ça me fait une boucle infinie et je ne vois pas du tout d'où viens le problème.
Ce n'est pas moi qui m'occupe de la création des fichiers (donc je ne choisi pas la forme du fichier) et il y a parfois plusieurs milliers de lignes, impossible d'y faire à la main.
Tout ce que je demande c'est de rajouter un " quand il y en a un en fin de champs, si quelqu'un a une solution je suis preneur :)
Si je n'ai pas été clair ou que vous avez des questions supplémentaires je répondrais.
Par avance merci ;)
A voir également:
- Insertion d'un caractère dans une chaîne
- Caractère ascii - Guide
- Caractère spéciaux - Guide
- Caractere speciaux - Guide
- Chaine tnt gratuite sur mobile - Guide
- Caractere vide - Guide
1 réponse
Bonjour,
La manipulation des fichiers CSV est un classique, de par sa simplicité il est bien plus utilisé qu'un fichier Excel par exemple.
Du coup tu as un certain nombre de codes Java qui manipulent déjà les fichiers CSV, je citerai notamment OpenCSV qui est surement le plus utilisé.
La confiance n'exclut pas le contrôle
La manipulation des fichiers CSV est un classique, de par sa simplicité il est bien plus utilisé qu'un fichier Excel par exemple.
Du coup tu as un certain nombre de codes Java qui manipulent déjà les fichiers CSV, je citerai notamment OpenCSV qui est surement le plus utilisé.
La confiance n'exclut pas le contrôle
Je savais même pas que cette classe existait, je vais voir ce que ça donne.
Encore merci