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

API standards et tierces Java Discussion :

[débutant]Regexp + traitement de texte


Sujet :

API standards et tierces Java

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 6
    Par défaut [débutant]Regexp + traitement de texte
    Bonjour,
    je dois effectuer un programme pour parcourir un fichier et en possédant un adresse ip, je dois supprimer tout un bloc.
    le fichier a cette structure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    define host{
    use linux_server
    host_name routeur9
    address 192.168.54.1
    }
    donc pour adresse 192.168.54.1 je supprime tout le bloc à partir de define.

    mais le problème est que j'arrive pas à localiser le bloc contenant l'adresse choisie.
    voici le code :



    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
    try {                File file = new File ("/home/user/host.txt");
                                     //lecture du fichier
                                   StringBuilder builder = new StringBuilder();
                                   final Scanner sc = new Scanner(new FileInputStream("/home/user/host.txt"));
                                   while (sc.hasNext())
                                   {
                                       builder.append(sc.nextLine().trim());
                                   }
                                   sc.close();
                                   builder.trimToSize();
                                   //préparation de la regexp
                                   final Pattern p = Pattern.compile("\\{[^\\}\\{]*\\}");
                                   Matcher m = p.matcher(builder.toString());
                                   int begin = 0, end = 0;
                                   //parse l'expression
                                   BufferedWriter sortiroutt = new BufferedWriter(new FileWriter("/home/user/routeursupp.txt", true));
                                   while (m.find()) {
                                       begin = m.start();
                                       end = m.end();
     
                                       //analyser le bloc
                                   if(m.equals("192.162.54.150"))
                                   {  // écrire le bloc à supprimer dans un autre fichier
                                       BufferedWriter sortirout = new BufferedWriter(new FileWriter("/home/user/routeur_gardé.txt", true));
                                       sortirout.write(builder.toString()+"\n");
                                       sortirout.close();
     
     
                                   }
                                   else {
                                       // écrire le bloc dans un fichier temporaire
                                           sortiroutt.write(builder+"\n");   
                                   }
                                   }
                                   sortiroutt.close();
                                   //prépare pour le prochain bloc
                                       builder = new StringBuilder(builder.substring(end));
                                       m = p.matcher(builder);  
          } catch(java.io.IOException e) {
                   e.printStackTrace();
                }


    il me retourne tjs la liste multiplié pls fois et sans suppression.

    merci de votre aide.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2002
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mars 2002
    Messages : 192
    Par défaut
    Quelque chose comme celà peut-être:
    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
            // Récupération du contenu du fichier
            String fileContent = FileUtils.readFileToString(new File("c:/temp/adress.txt"));
     
            Pattern p = Pattern.compile("(?s)define host\\{.+?\\}");
            Matcher m = p.matcher(fileContent);
     
            // Tant qu'on trouve des blocs de définition de serveur
            while (m.find()) {
                String host = m.group();
                if (host.contains("192.168.54.1")) {
                    // Le bloc contient l'adresse IP que l'on ne veut pas
                    System.out.println("host supprimé : " + m.group());
                } else {
                    // Le bloc ne contient pas l'adresse IP => on le garde
                    System.out.println("host gardé : " + m.group());
                }
            }

  3. #3
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 6
    Par défaut
    Bonjour,
    merci pour ta réponse.
    Le code marche et me retourne les hotes que je veux garder mais il y a un petit problème : il n'ya plus un espace entre deux champs différents : avant il y a avait le retour à la ligne.
    alors existe il un moyen pour préserver l'espace? car ce fichier texte représente une partie d'un fichier de configuration donc les espaces ou les retours à la ligne doivent être préservés.

    Merci d'avance;

  4. #4
    Membre expérimenté
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2002
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mars 2002
    Messages : 192
    Par défaut
    L'idée c'est de garder en plus des blocs serveur les indentations :
    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
            Pattern p = Pattern.compile("((?s)define host\\{.+?\\})|(\\r\\n)+");
            Matcher m = p.matcher(fileContent);
     
            // Tant qu'on trouve des blocs de définition de serveur
            while (m.find()) {
                String host = null;
                String LS = null;
                if (m.groupCount() == 2) {
                    host = m.group(1);
                    LS = m.group(2);
                } else {
                    host = m.group();
                }
                if (host != null && host.contains("192.168.54.1")) {
                    System.out.print(host);
                }
                if (LS != null) {
                    System.out.print(LS);
                }
            }
    Adapte dans ton code avec les caractères que tu veux (espaces, tabluations, retour chariot Unix/DOS/Mac).

    Bon courage.

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/12/2006, 19h21
  2. [Débutant]RichEdit => Rendre le texte non sélectionnable
    Par Runlevel dans le forum C++Builder
    Réponses: 4
    Dernier message: 02/12/2004, 23h47
  3. Réponses: 8
    Dernier message: 29/11/2004, 16h28
  4. Réponses: 1
    Dernier message: 24/11/2004, 16h54
  5. Reinstaller le traitement de texte de OppenOffice
    Par pierrepierre dans le forum Applications et environnements graphiques
    Réponses: 5
    Dernier message: 06/05/2004, 12h34

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