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

Entrée/Sortie Java Discussion :

[Débutant]Suppression retour chariot dans un fichier texte.


Sujet :

Entrée/Sortie Java

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 61
    Points : 23
    Points
    23
    Par défaut [Débutant]Suppression retour chariot dans un fichier texte.
    Bonjour,

    j'ai un souci avec l'un de mes codes, je parcourt un fichier texte dans le quel j'aimerais supprimer mes retours chariots et les remplacer par de simples espaces, j'utilise donc replaceAll mais rien ne se passe. Je ne sais pas si je parcours correctement mon fichier texte...

    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
     
           String result = "";
     
           BufferedReader br = new BufferedReader
           (new FileReader("text.txt"));
           FileWriter fw = new FileWriter("tmp.txt");
           String line;
           while ((line = br.readLine()) != null)
            {
                result = line.replaceAll("[\n\r]+","e");
                System.out.println(result);
             fw.write(result);
            }
     
    br.close();
    fw.close();
    Merci d'avance.

  2. #2
    Membre confirmé Avatar de miloux32
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    545
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 545
    Points : 565
    Points
    565
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
          result = line.replaceAll("\n"," ");
    Ca devrait marcher je pense
    C'est pas parce que ca marche que c'est bon!!
    Pensez au bouton "Résolu"
    Je ne réponds pas en privé aux questions

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 61
    Points : 23
    Points
    23
    Par défaut
    J'avais tester et je viens de re-tester et ça ne fonctionne pas...

    Merci quand même si tu as une autre idée ou si quelqu'un a une idée.

  4. #4
    Membre confirmé Avatar de miloux32
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    545
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 545
    Points : 565
    Points
    565
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     result = line.replaceAll("\\n"," ");
    J'ai toujours un doute pour savoir s'il faut doubler, tripler ou quadrupler les \ ....
    C'est pas parce que ca marche que c'est bon!!
    Pensez au bouton "Résolu"
    Je ne réponds pas en privé aux questions

  5. #5
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 61
    Points : 23
    Points
    23
    Par défaut
    Toujours pas, je ne comprend vraiment pas mais je pense que ça vient plutôt de mon parcours de fichier...

    Merci de m'aider en tout cas...

  6. #6
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 50
    Points : 60
    Points
    60
    Par défaut
    Si tu as un doute sur la methode remplaceAll fait autrement :

    demande luid e t'afficher a chaque fois au'il trouve le caractere "\n"

    Tu pourras deja savoir si ton parcours de fichier est bon.

    Ensuite a toi de voir comment remplace les carateres.

  7. #7
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,



    Ben le replaceAll() est complètement inutile puisque le readLine() supprime déjà les fin de lignes donc ton code devrait marcher !!!


    a++


    PS : Et ils sont ou les finally pour fermer les flux ?
    Comment libérer proprement les ressources ?

  8. #8
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 61
    Points : 23
    Points
    23
    Par défaut
    Ok pour les finaly, je vais m'en occupper se sera plus propre, le souci c'est que j'ai différent traitement à effectuer en fonction du nombre de retour chariots que je rencontre, il faut donc obligatoirement que je puisse les récupérer donc (bien que pour le moment ça fonctionne) le problème reste le même...


    Merci pour votre aide.

  9. #9
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    C'est à dire ? Soit plus précis ?

    Sinon une ligne == un retour chariot...


    Ou alors il te reste le choix de la lecture par bloc


    a++

  10. #10
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 61
    Points : 23
    Points
    23
    Par défaut
    Plus précisément lorsque par exemple dans mon fichier texte je rencontre 2 ou pusieurs retours chariots à la suite je les remplace par un seul retour chariot, lorsque je rencontre qu'un seul retour chariot je le supprime tout simplement... Par exemple le fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Bonjour ceci est un test
    comprenant des retours chariots
     
     
     
    Ici plusieurs retours...
    devient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Bonjour ceci est un test comprenant des retours chariots
    Ici plusieurs retours...
    J'espère être compréhensible...

  11. #11
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 61
    Points : 23
    Points
    23
    Par défaut
    Personne n'a d'idée pour moi s'il vous plait...

  12. #12
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Ben deux retour chariot à la suite revient en fait à avoir une ligne vide...


    Sinon comme je l'ai dit une lecture par bloc pour avoir le fichier au complet avec les fin de ligne, et là tu pourras utiliser le replaceAll()...

    a++

  13. #13
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 61
    Points : 23
    Points
    23
    Par défaut
    Ta lecture par bloc m'intéresse bien mais je ne vois pas comment la mettre en œuvre... Si tu pouvais me donner un coup de main.

    Merci d'avance...

  14. #14
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Cela donne quelque chose comme cela :
    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
    	public String read(String fileName) throws IOException {
    		FileReader reader = new FileReader(fileName);
    		try {
    			// Le buffer qui contiendra tout le fichier
    			StringBuffer buffer = new StringBuffer();
    			// Le buffer utilisé pour lire un bloc
    			char[] cbuf = new char[8192];
    			// Le nombre de caractère lu à chaque iteration :
    			int len;
     
    			// On li par bloc et on copue dans le StringBuffer :
    			while ( (len=reader.read(cbuf)) >= 0 ) {
    				buffer.append(cbuf, 0, len);
    			}
    			// Et on retourne la chaine ainsi obtenu :
    			return buffer.toString();
    		} finally {
    			reader.close();
    		}
    	}
    Bien sûr c'est à éviter sur des fichiers de très grande taille car tu auras alors la totalité du fichier en mémoire...


    a++

  15. #15
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 61
    Points : 23
    Points
    23
    Par défaut
    Merci bien je m'en vais de suite testé ça...

  16. #16
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 61
    Points : 23
    Points
    23
    Par défaut
    Je viens de tester mais j'ai un souci quand à l'utilisation du replaceAll() voilà ce que je fait mais rien ne se passe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    			// On li par bloc et on copue dans le StringBuffer :
    			while ( (len=reader.read(cbuf)) >= 0 ) {
                                    buffer.toString().replaceAll("\\n","AAA");
    				buffer.append(cbuf, 0, len);
    			}
    			// Et on retourne la chaine ainsi obtenu :
                            System.out.println(buffer.toString());
    Si tu vois d'où peut venir le problème... Merci pour ton aide en tout cas.

  17. #17
    Membre extrêmement actif Avatar de jojodu31
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Points : 814
    Points
    814
    Par défaut
    ceci ne peut pas marcher , ça fait la chose suivante :
    ça va remplacer :
    un texte avec \n le truc a remplacer
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    un texte avec AAA le truc a remplacer
    en effet tu ne cherche pas le saut de ligne mais la chaine "\n" à cause du double slash...

    tu dois pouvoir te débrouiller en vérifiant si ta ligne lue = "" , et en comptant le nombre de lignes successives qui valent "" ... enfin je sais pas c'est une vague idée juste
    Heureux soient les fêlés, car ils laisseront passer la lumière.

    Mieux vaut fermer sa gueule et passer pour un con que l'ouvrir et ne laisser aucun doute à ce sujet.

    Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java

  18. #18
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par jojodu31 Voir le message
    en effet tu ne cherche pas le saut de ligne mais la chaine "\n" à cause du double slash...
    Non car le double antislash est interprété par les regexp donc ca marchera.

    Le problème vient plutôt du fait qu'il faut récupérer le retour de replaceAll()...


    a++

    PS : tu ne traites pas les lignes vides avec ce code dont il n'a aucun intérêt par rapport au premier que tu as posté...

  19. #19
    Membre extrêmement actif Avatar de jojodu31
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Points : 814
    Points
    814
    Par défaut
    exact
    la syntaxe est du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    texte = texte.replaceAll(...);
    Heureux soient les fêlés, car ils laisseront passer la lumière.

    Mieux vaut fermer sa gueule et passer pour un con que l'ouvrir et ne laisser aucun doute à ce sujet.

    Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java

  20. #20
    Membre à l'essai
    Inscrit en
    Décembre 2006
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 61
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Non car le double antislash est interprété par les regexp donc ca marchera.

    Le problème vient plutôt du fait qu'il faut récupérer le retour de replaceAll()...


    a++

    PS : tu ne traites pas les lignes vides avec ce code dont il n'a aucun intérêt par rapport au premier que tu as posté...

    Là je commence à être un peu perdu, par rapport à ce que je voulais faire je ne vois pas comment utiliser ton code au mieux. Si tu pouvais me réexpliquer, je suis vraiment désolé.

    Merci beaucoup pour votre aide à tous...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Mettre des retours chariot dans un fichier
    Par Isa31 dans le forum Langage
    Réponses: 8
    Dernier message: 02/03/2006, 16h13
  2. Problème retour chariot dans un fichier texte
    Par Redondo dans le forum Windows
    Réponses: 2
    Dernier message: 08/02/2006, 18h23
  3. Suppression de lignes dans un fichier texte
    Par Isa31 dans le forum Langage
    Réponses: 16
    Dernier message: 26/01/2006, 20h07
  4. Réponses: 2
    Dernier message: 16/01/2006, 19h34
  5. [VB.NET]Retour chariot dans un champ texte
    Par San Soussy dans le forum ASP.NET
    Réponses: 10
    Dernier message: 23/06/2005, 12h36

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