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] filtrer un fichier pour afficher des infos


Sujet :

API standards et tierces Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 11
    Points : 5
    Points
    5
    Par défaut [débutant] filtrer un fichier pour afficher des infos
    Bonjour,
    j'affiche un fichier dans un jTextArea, mais je voudrais le filtrer pour afficher seulement certaines lignes (il s'agit des réponses d'un serveur à une requête de DNS et d e whois sur une liste d'adresses IP)
    j'ai donc créé une classe Filtrage qui contient toutes les expressions auxquelles je compare chaque début de ligne et qui passe un booleen à true s'il y a concordance.

    classe filtrage :
    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
     
    /**Filtre le contenu du fichier IPanalyse.txt pour afficher uniquement les infos pertinentes*/
    public class Filtrage {
     
      /**Passe à true si la ligne en cours est pertinente*/
      public boolean PeutEcrire = false;
     
      /**Ligne du fichier*/
      private String Ligne = "";
     
      /**Tableau d'expressions régulières*/
      private String[] Expr = {
          "Adresse",
          "Address",
          "changed",
          "City",
          "Country",
          "country",
          "descr",
          "DNS ",
          "inetnum",
          "netname",
          "OrgName",
          "OrgID",
          "PostalCode",
          "remarks",
          "route",
          "status",
          "StateProv",
      };
     
      /**Nombre d'ocurrences du tableau Expr*/
      private int Long = Expr.length;
     
      /**Méthode qui compare le début de la ligne en cours à des expressions récurrentes*/
      public void Filtrer(String Ligne){
       for (int i = 0; i< Long; i++){
         if (Ligne.startsWith(Expr[i])) {
           if (Ligne.startsWith("OrgID:      LACNIC")) {Ligne += "\n" + "Pour plus d'informations, consultez whois.lacnic.net" + "\n";}
           PeutEcrire = true;
           }
         else PeutEcrire = false;
      }
    }
    }
    classe manipfic qui gère les manipulations de fichiers :

    déclaré en début de classe, avec les autres variables :
    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
     
    /**classe qui filtre le fichier d'analyse avant de l'afficher */
     private Filtrage Filtre = new Filtrage();
     
     /**lecture de fichier*/
        public void Lire() {
         try
           {
           Ligne = tamponIn.readLine();//lecture de la ligne dans le tampon
           if (Ligne == null) tamponIn.close();//fermeture du tampon en fin de fichier
           }
         catch(IOException ioe){ JOptionPane.showMessageDialog(this, "erreur lecture",
            "",  JOptionPane.INFORMATION_MESSAGE);}
        }
     
    /**ouverture et lecture du fichier temporaire pour affichage de l'analyse*/
        public void OuvrirAnalyse() {
       try
       {
         Texte = "";
         fichierEntree = new FileReader(Chemin);//ouvre le fichier pour le lire
         tamponIn = new BufferedReader(fichierEntree);//crée un tampon pour lire le flux
         Lire();
         while (Ligne != null) { //tant que la ligne lue n'est pas vide (not EOF)
           Filtre.Filtrer(Ligne); //vérifier si la ligne est pertinente
           if (Filtre.PeutEcrire = true) { //si la ligne est pertinente
             Texte += Ligne + "\n"; //ajout de la ligne dans le texte filtré
             Lire(); //continue à lire
           }
           else //sinon
             Lire(); //continue à lire
         }
        }
       catch(IOException ioe) {  JOptionPane.showMessageDialog(this, "erreur lecture analyse",
      "",  JOptionPane.INFORMATION_MESSAGE);}
    }
     
    fenêtre dans laquelle se trouve le jTextArea :
     
    /**affiche le contenu du fichier IPanalyse.txt*/
    private void AfficherAnalyse(){
       jTextAreaAffiche.setText("");//initialise le contenu du jTextArea
       manipfic.OuvrirAnalyse();//ouverture du fichier d'analyse
       jTextAreaAffiche.append(manipfic.Texte + "\n"); //ajout du texte filtré
    }
    Cependant, ça ne marche pas et j'ai encore le texte dans son intégralité ...
    [ Modéré par vedaer ]
    -> Ajout des balises code
    [ Merci de respecter les Règles du Forum ]

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 11
    Points : 5
    Points
    5
    Par défaut erreur de comparaison avec le booléen
    je crois que l'erreur est ici : if (Filtre.PeutEcrire = true)
    alors j'ai écrit : if (Filtre.PeutEcrire == true) mais maintenant, il n'y a plus rien qui s'affiche. Pourtant j'ai bien dans mon fichier des lignes qui commencent par les expressions de ma String[] Expr

  3. #3
    Membre expérimenté
    Avatar de narmataru
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 548
    Points : 1 680
    Points
    1 680
    Par défaut
    essaye peut être de faire un trim() sur ligne avant le startsWith() pour supprimer les espace et les probables caractères de saut en début de ligne, on ne sait jamais...

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 11
    Points : 5
    Points
    5
    Par défaut trim fait
    merci pour ton aide, Narmartaru,
    j'ai fait un trim() sur la ligne avant de la comparer et j'ai bien une ligne qui s'affiche, il s'agit de celle qui commence par "StateProv", la dernière expression de mon tableau de string Expr[]
    Pourtant j'ai d'autres lignes qui qui auraient dû être retenues.
    C'est curieux, c'est comme si la comparaison ne s'effectuait qu'avec la dernière expression du tableau.

  5. #5
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    Peux tu afficher toutes les lignes que tu as lues avant de filtrer :

    Un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for (int index = 0; index < Long; index++)
    {
      System.out.println("Expression " + index + " : " + expr[index]);
    }
    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 11
    Points : 5
    Points
    5
    Par défaut problème dans la boucle ?
    effectivement, pour vérifier mon hypothèse, j'ai mis "Adresse" en dernière expression à comparer, et j'ai bien la ligne qui commence par "Adresse" qui s'affiche au lieu de "StateProv".
    Donc, il y a un problème au moment de la comparaison, mais je ne crois pas que ce soit dans la boucle qui parcourt toutes les expressions du tableau, parce que d'habitude, ce genre de boucle fonctionne bien pour les comparaisons...

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 11
    Points : 5
    Points
    5
    Par défaut affichage des lignes lues (réponse à Bulbo)
    j'affiche les lignes lues avant de les filtrer avec un

    JOptionPane.showMessageDialog(null, Ligne,"Ligne", JOptionPane.INFORMATION_MESSAGE);

    et je vois bien que certaines lignes correspondent bien à ma recherche, je pense même que le problème n'est pas au moment de la comparaison du début de ligne, mais au moment de récupérer cette ligne. Je crois que la dernière ligne écrase la précédente. Je suis en train d'essayer de récupérer les lignes d'une autre façon...

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 11
    Points : 5
    Points
    5
    Par défaut problème résolu : le code
    Merci pour votre aide, je suis bien contente que ce problème soit résolu !
    Voici les modifications que j'ai apporté à mon code :

    dans la classe Filtrage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    /**Méthode qui compare le début de la ligne en cours à des expressions*/
      public void Filtrer(String s){
         s.trim();//supprime les espaces au cas ou
         for (int i = 0; i< Long; i++){
         if (s.startsWith(Expr[i])) {
           if (s.startsWith("OrgID:      LACNIC")) {Ligne += "\n" + "Pour plus d'informations, consultez whois.lacnic.net" + "\n";}
           Texte += s + "\n";
          }
     }
    dans la classe manipfic :
    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
     
     /**ouverture et lecture du fichier temporaire pour affichage de l'analyse*/
        public void OuvrirAnalyse() {
       try
       {
         Texte = "";
         fichierEntree = new FileReader(Chemin); //ouvre le fichier pour le lire
         tamponIn = new BufferedReader(fichierEntree); //crée un tampon pour lire le flux
         Lire();//lecture de la première ligne
         while (Ligne != null) {
           Filtre.Filtrer(Ligne);
           Lire();//continue à lire
         }
         Texte = Filtre.Texte;
       }
       catch(IOException ioe) {  JOptionPane.showMessageDialog(this, "erreur lecture analyse",
      "",  JOptionPane.INFORMATION_MESSAGE);}
    }
    dans la classe principale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    /**affiche le contenu du fichier IPanalyse.txt*/
    private void AfficherAnalyse(){
       jTextAreaAffiche.setText("");//initialise le contenu du jTextArea
       manipfic.OuvrirAnalyse();//ouverture du fichier d'analyse
       jTextAreaAffiche.append(manipfic.Texte + "\n"); //ajout du texte filtré
    }
    [ Modéré par vedaer ]
    -> Ajout des balises code
    [ Merci de respecter les Règles du Forum ]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 14
    Dernier message: 06/03/2008, 16h04
  2. Réponses: 2
    Dernier message: 24/07/2007, 13h50
  3. [Débutant] Prob pour afficher des rect de couleurs
    Par little pepito dans le forum 2D
    Réponses: 2
    Dernier message: 08/05/2007, 18h29
  4. Réponses: 2
    Dernier message: 26/01/2007, 14h58
  5. Réponses: 2
    Dernier message: 19/12/2005, 20h11

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