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

Langage Java Discussion :

[debutant] comment remplacer une chaine de caractere dans un fichier


Sujet :

Langage Java

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1
    Points : 1
    Points
    1
    Par défaut [debutant] comment remplacer une chaine de caractere dans un fichier
    salut tout le monde,

    dans un fichier texte, j'aimerai savoir comment rechercher une chaine de caracteres specifique puis la remplacer par une autre.

    merci

  2. #2
    Membre averti Avatar de dazz_x
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2006
    Messages : 269
    Points : 328
    Points
    328
    Par défaut
    en récupérant ton fichier puis en utilisant replaceAll de String qui te permet de remplacer des mots par des autres (il y a un exemple dans la FAQ)
    La différence entre la théorie et la pratique est plus mince en théorie qu'en pratique

  3. #3
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    je crois que tu est obligé de parcourir le fichier pour remplir une variable (un stringBuffer) et de faire un replaceAll dessus.

    mais bon il y a peut etre plus propre/efficace ...

    [EDIT] ha pas assez rapide ...
    "If email had been around before the telephone was invented, people would have said, 'Hey, forget email! With this new telephone invention I can actually talk to people!"

    Besoin d'une nouvelle méthode pour développer ? -> http://www.la-rache.com/

  4. #4
    Membre confirmé Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Points : 508
    Points
    508
    Par défaut
    à mon avis, le plus rapide pourrait être :
    - d'ouvrir un flux de fichier (on va l'appeler 'r') depuis le fichier que tu veux lire
    - d'ouvrir un flux de fichier (on va l'appeler 'w') vers 1 nouveau fichier (tester si existant -> effacer puis recréer)

    de déclarer 1 String 's' qui prend la première valeur lue de r

    et enfin :

    tant que s non null {
    écrire s.replace("chaine à remplacer", "chaine à inscrire") dans w
    lire s dans r
    }


    Voilà .. t'as l'algo
    Toute vérité est bonne à entendre, même si toutes les vérités ne sont pas bonnes à dire.
    Rien ne sert de partir à point, il vaut mieux courir .

  5. #5
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    histoire d'avoir plusieurs points de vue, moi j'aurais plutot vu un truc style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    BufferedReader in=new BufferedReader(new FileReader("source"));
    StringBuffer sb = new StringBuffer();
     
    while((ligne=in.readLine())!=null){
    sb.append(ligne)
    }
     
    String clean = sb.toString().replaceAll("Recherché","Remplacé par");
    in.reset(); // à voir si c'est suffisant
    in.write(clean);
    in.close();
    avec les exceptions qui vont bien.


    Apres ça dépend de ce que tu veux remplacer. Si c'est juste des caractères, la solution de neptus est bonne. Apres si c'est des phrases (et donc sur plusieurs lignes) mieux vaut travailler sur le texte dans sa globalité.

    Apres, mon idée est surement moins rapide que celle de Neptus. Peut etre un mis des 2 te comblerait ...
    "If email had been around before the telephone was invented, people would have said, 'Hey, forget email! With this new telephone invention I can actually talk to people!"

    Besoin d'une nouvelle méthode pour développer ? -> http://www.la-rache.com/

  6. #6
    Membre confirmé Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Points : 508
    Points
    508
    Par défaut
    écrire dans 1 reader ??

    original ... mais faux il me semble.
    Toute vérité est bonne à entendre, même si toutes les vérités ne sont pas bonnes à dire.
    Rien ne sert de partir à point, il vaut mieux courir .

  7. #7
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    oui effectivement, j'ai pas trop réfléchi ...

    mais bon ... c'est pas vraiment important pour la compréhension de l'algo je pense


    ATTENTION ! NE PAS COPIER/COLLER ET METTRE EN PRODUCTION
    "If email had been around before the telephone was invented, people would have said, 'Hey, forget email! With this new telephone invention I can actually talk to people!"

    Besoin d'une nouvelle méthode pour développer ? -> http://www.la-rache.com/

  8. #8
    Membre éclairé Avatar de sozie9372
    Inscrit en
    Mai 2005
    Messages
    713
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 713
    Points : 724
    Points
    724
    Par défaut
    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
     
    public static boolean readReplace(String fileName, String oldPattern,
                String replPattern, int lineNumber) {
            String line;
            StringBuffer sb = new StringBuffer();
            int nbLinesRead = 0;
            try {
                FileInputStream fis = new FileInputStream(fileName);
                BufferedReader reader = new BufferedReader(new InputStreamReader(
                        fis));
                while ((line = reader.readLine()) != null) {
                    nbLinesRead++;
                    line = line.toLowerCase();
     
                    if (nbLinesRead == lineNumber) {
                        line = line.replaceFirst(oldPattern.toLowerCase(),
                                replPattern);
                    }
                    sb.append(line + "\n");
                }
                reader.close();
                BufferedWriter out = new BufferedWriter(new FileWriter(fileName));
                out.write(sb.toString());
                out.close();
     
            } catch (Exception e) {
                return false;
            }
            return true;
        }
    Et voila !
    "Il y a 3 personnes en ce monde sur qui tu peux compter : moi, le pape et le cavalier solitaire ! "
    Penser à svp

  9. #9
    Membre confirmé Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Points : 508
    Points
    508
    Par défaut
    c'est une autre façon de voir le problème :

    ton code impose deux contraintes importantes :
    1 - il faut connaître la ligne (n°) à modifier (si il n'y en a qu'une

    2 - on considère que la chaine à remplacer dans le fichier ne contient pas de majuscule !!!!

    un peu tordu ton code .. enfin tout dépend du besoin ....

    duorade, si tu pouvais éclaircir le terme "rechercher une chaine de caracteres specifique" : tu entend par là une seule chaîne dans le fichier (présente à une seule ligne) ou alors toutes les instances de la chaîne recherchée ?


    1 dernier truc : on est pas forcément là pour cracher du code : si il cherche par lui-même et qu'il trouve, la prochaine fois il s'en souviendra
    (et ça nous permettra de ne pas à avoir à lui répéter )
    Toute vérité est bonne à entendre, même si toutes les vérités ne sont pas bonnes à dire.
    Rien ne sert de partir à point, il vaut mieux courir .

  10. #10
    Membre éclairé Avatar de sozie9372
    Inscrit en
    Mai 2005
    Messages
    713
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mai 2005
    Messages : 713
    Points : 724
    Points
    724
    Par défaut
    J'ai donné ce code comme je l'utilise, rien n'empêche de le modifier... Si t'as pas besoin de connaître le numéro de ligne, tu le vires, si tu ne veux pas utiliser la méthode toLowerCase, tu la vires. Le problème c'est qu'il faudra être plus précis sur l'input que tu passeras en paramètre...
    J'avais cette méthode sous le coude, je m'en suis inspiré d'une trouvé sur le net, donc au final en cherchant bien il aurait bien finit par la trouver...
    "Il y a 3 personnes en ce monde sur qui tu peux compter : moi, le pape et le cavalier solitaire ! "
    Penser à svp

  11. #11
    Membre confirmé Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Points : 508
    Points
    508
    Par défaut
    ben il l'a cherchée ici et il l'a finalement trouvée
    Toute vérité est bonne à entendre, même si toutes les vérités ne sont pas bonnes à dire.
    Rien ne sert de partir à point, il vaut mieux courir .

Discussions similaires

  1. Réponses: 0
    Dernier message: 15/12/2011, 23h33
  2. Réponses: 1
    Dernier message: 13/06/2007, 13h14
  3. Remplacer une chaîne de caractères dans un fichier .hex
    Par subsix dans le forum Assembleur
    Réponses: 8
    Dernier message: 23/11/2006, 21h06
  4. [debutant][String] Remplacer une chaine de caractère contenant un ?
    Par Jarodnet dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 12/10/2005, 12h47
  5. Réponses: 7
    Dernier message: 27/09/2005, 11h54

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