IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Remplacer saut de ligne (alt + entrée) dans cellule (fichier .csv)


Sujet :

Java

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 71
    Points : 44
    Points
    44
    Par défaut Remplacer saut de ligne (alt + entrée) dans cellule (fichier .csv)
    Bonjour à tous, alors voilà j'ai un programme qui remplace des carracteres par d'autres, et j'aimerais remplacer les saut de ligne dans les cellule par des espace mais je ne sais pas comment faire pour interpreter ces saut de ligne,

    voilà mon code :

    fichier.ini
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    cheminIN=C:\julien\java\PourOlivier\test.csv
    cheminOut=C:\julien\java\PourOlivier\test2.csv
    parametre="\t@@;##&quot@@ ##&amp@@ "
    @@ = separateur entre le carractere remplacer et le carractere remplacent
    ## = separateur entre les carracteres à remplacer

    fichier.bat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    @echo off
    for /f "tokens=1,2 delims==" %%I in ('type donneeFichierV2.ini') do SET %%I=%%J
     
    echo %cheminIn%
    echo %cheminOut%
    echo %parametre%
     
    java -jar convertisseur.jar %cheminIn% %cheminOut% %parametre%
    programme java :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.util.Scanner;
    import java.util.regex.Pattern;
     
    public class convertisseur {
     
    	public static void main(String[] parametre) throws IOException {
     
    		String cheminIn = parametre[0];
    		String cheminOut = parametre[1];
    		String para = parametre[2];
     
     
    		// compilation de la regex
    		Pattern p = Pattern.compile("##");
    		Pattern pp = Pattern.compile("@@");
    		// séparation en sous-chaînes
    		String[] items = p.split(para);	
     
    		Scanner scanner=new Scanner(new File(cheminIn));
     
    		FileWriter writer = null;
    		writer = new FileWriter(cheminOut, false);
     
    		//Lecture du fichier
    		while (scanner.hasNextLine()) {
    		    String line = scanner.nextLine();
     
     
    		    //Remplace les caractères
    			for(int i=0; i < items.length; i++){
    				String[] sousItems = pp.split(items[i]);
    				String paraIn= sousItems[0];
    				String paraOut = sousItems[1];
    				line=line.replaceAll(paraIn, paraOut);
    			}
     
    		    //Ecriture dans le nouveau fichier
    			if(line.length()!=0){
    			    String texte = line+System.getProperty("line.separator");
    			    try{
    			         writer.write(texte,0,texte.length());
    			    }catch(IOException ex){
    			        ex.printStackTrace();
    			    }
    			}
    		} 
    		writer.close();
    		scanner.close();    
    	}
    }

    Si quelqu'un a une solution, merci !

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Hum.

    Et il ressemble à quoi, ton .csv dans lequel il y a parfois des fins de ligne ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 71
    Points : 44
    Points
    44
    Par défaut
    voilà le fichier csv :

    et je voudrais que
    dossier
    pedagogique
    soit sur la même ligne
    Images attachées Images attachées  

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Je voulais dire, en tant que fichier texte, ouvert avec un Notepad, il ressemble à quoi ? -_-°
    Et puis tant qu'à faire, un éditeur hexa pour voir si les fins de lignes sont en un ou deux octets, aussi...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 71
    Points : 44
    Points
    44
    Par défaut
    Ok désolé je te met sa, j'espere que c'est sa que tu voulais ?

    Merci
    Images attachées Images attachées  

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Franchement, si on en est à mettre des images, autant donner le fichier directement à la place. Ce sera tout de même plus utile.

    Mais bon... Ça ne ressemble pas à un fichier .csv, ça.
    (Au passage, pourquoi y a-t-il deux images identiques ?)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 71
    Points : 44
    Points
    44
    Par défaut
    Merde je me suis planté j'ai mis deux fois celle en hexa, bah c'est le fichier csv ouvert avec notepad ++

    voilà le contenu du fichier sous notepad ++ (en texte)

    Origine 1;Origine 2;doit obtenir
    "dossier
    pédagogique";"dossier
    pédagogique";dossier pédagogique
    "dossier
    pédagogique";"dossier
    pédagogique";dossier pédagogique
    "dossier
    pédagogique";"dossier
    pédagogique";dossier pédagogique
    "dossier
    pédagogique";"dossier
    pédagogique";dossier pédagogique

  8. #8
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Ouais ben c'est pas gagné tout ça.
    Comme tu peux le constater, les fins de lignes apparaissent sous forme de... Fin de ligne !
    Or tu lis ton fichier ligne par ligne, tu ne risques donc pas d'avoir quoi que ce soit à remplacer.

    La première chose à faire est de trouver une solution à ça.

    - Solution simple, si le fichier n'est pas trop gros : Charger tout le fichier dans une String, et faire les remplacements sur cette String. Comme ça les fins de lignes ne sont que des caractères normaux et le problème disparaît.

    - Solution plus compliquée : tu jettes ton code Java et tu utilises une bibliothèque CSV pour lire tes CSVs.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 71
    Points : 44
    Points
    44
    Par défaut
    Ok, merci beaucoup pour tes réponses, je suis débutant (actuellement stagiaire) donc la premiere solution serait le mieux pour moi mais je crois que ce programme sera destiné à des gros fichiers aussi. donc je vais essayer de regarder les bibliotheques csv (je connais pas du tout je pourrais quand même m'en sortir ?) merci en tout cas

  10. #10
    Membre confirmé

    Inscrit en
    Juin 2005
    Messages
    1 155
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 1 155
    Points : 475
    Points
    475
    Par défaut
    Tu peux utiliser l'api opencsv dont l'utilisation est très facile.

  11. #11
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 71
    Points : 44
    Points
    44
    Par défaut
    Désolé je m'y connais vraiment pas assez en java je sais meme pas c'est quoi une api >.<, jcrois jvais tenter de mettre tout mon fichier dans un string.

    Merci

  12. #12
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Définition de API.

    Si le format de ton fichier est comme ça, chaque concatène les lignes qui se suivent dans un StringBuilder jusqu'à ce que tu trouves une ligne qui commence par un " (double quote) (commencement d'un nouveau entité). Tu supprimes les sauts de ligne et split ensuite par ";"

    A+.

  13. #13
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 71
    Points : 44
    Points
    44
    Par défaut
    Re, merci pour L'api ^^, et ok pour la technique la c'est bon j'arrive a mettre mon fichier dans une variable, mais j'ai une question con le carractere de saut de ligne a mettre dans mon replaceAll( , ), c'est quoi son code ?
    en Hexa c'est 0a je crois mais il faudrais que je convertisse ma chaine en hexa que je supprimme les saut de ligne et je reconvertisse ensuite.

    Voilà mon code actuel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileWriter;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.util.regex.Pattern;
     
     
    public class convCsv {
     
     
    	public static void main(String[] parametre) {
     
     
    		String cheminIn = "c:/test.txt";
    		String cheminOut = parametre[1];
    		//String para = parametre[2];
    		String chaine="";
     
    		// compilation de la regex
    		//Pattern p = Pattern.compile("##");
    		//Pattern pp = Pattern.compile("@@");
    		Pattern l = Pattern.compile(";");
    		// séparation en sous-chaînes
    		//String[] items = p.split(para);	
     
    		File fichier= new File(cheminIn);
    		try{
    			InputStream ips=new FileInputStream(fichier); 
    			InputStreamReader ipsr=new InputStreamReader(ips);
    			BufferedReader br=new BufferedReader(ipsr);
    			String ligne;
    			while ((ligne=br.readLine())!=null){
    				chaine = chaine + ligne+" ";
    			}
    			br.close(); 
    		}		
    		catch (Exception e){
    			System.out.println(e.toString());
    		}
    		//for(int i=0; i < items.length; i++){
    			//String[] sousItems = pp.split(items[i]);
    			//String paraIn= sousItems[0];
    			//String paraOut = sousItems[1];
    			chaine=chaine.replaceAll(,);
    			String[] ligne = l.split(chaine);
     
    		//}
    		System.out.println(chaine);
    		FileWriter writer = new FileWriter(cheminOut, false);
    		for(int i=0; i < ligne.length; i++){
    		writer.write(ligne[i],0,ligne[i].length());
    		}
    	}
     
    }

  14. #14
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    0a c'est 10 en décimal, donc à revoit l'autre discussion.

  15. #15
    Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 71
    Points : 44
    Points
    44
    Par défaut
    Oui sa marche presque !! merci, le probleme c'est que j'ai tout sur la meme ligne maintenant xD
    Je viens de me rendre compte que même sans le replace je n'ai plus qu'une seule ligne.

    Enfaite je crois que je dois faire un split au niveau du carractere 0d0a en hexa qui correspond au retour chariot et saut de ligne, donc j'ai fait mon split avec le carractere "\rn", et apres j'ai mis un "\rn" à la fin de chaque ligne. et avec le replace je supprimme le \n qui correspond à mes saut de ligne dans les cellules, mais sa veut pas marcher.

    Je crois avoir compris, quand je met tout dans la meme variable sa me suprimme les carracteres \n\r ect... du coup je ne peut pas split et séparer les lignes.

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/03/2014, 09h53
  2. inclure une ligne de données dans un fichier csv
    Par alvine18 dans le forum Langage
    Réponses: 5
    Dernier message: 08/06/2012, 14h40
  3. Ligne en trop dans un fichier .csv généré via jasper
    Par palopalto dans le forum Jasper
    Réponses: 0
    Dernier message: 14/11/2011, 16h25
  4. [Excel] Insérer un saut de ligne (ALT+ENTER)
    Par tonf dans le forum Excel
    Réponses: 8
    Dernier message: 17/09/2010, 23h47
  5. Réponses: 16
    Dernier message: 22/03/2006, 11h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo