Insertion d'un caractère dans une chaîne

Fermé
nettpod Messages postés 7 Date d'inscription jeudi 10 avril 2014 Statut Membre Dernière intervention 16 mai 2014 - 16 mai 2014 à 17:14
nettpod Messages postés 7 Date d'inscription jeudi 10 avril 2014 Statut Membre Dernière intervention 16 mai 2014 - 16 mai 2014 à 18:54
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)

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:

1 réponse

KX Messages postés 16741 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 30 mai 2024 3 016
Modifié par KX le 16/05/2014 à 18:56
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
0
nettpod Messages postés 7 Date d'inscription jeudi 10 avril 2014 Statut Membre Dernière intervention 16 mai 2014 2
16 mai 2014 à 18:54
Merci de ta réponse ;)

Je savais même pas que cette classe existait, je vais voir ce que ça donne.
Encore merci
0