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 :

récupérer un stringbuffer


Sujet :

Java

  1. #1
    Membre éclairé
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2013
    Messages : 286
    Par défaut récupérer un stringbuffer
    Bonjour
    je suis entrain de lire un contenu d'un résultat avec les stringBuffer bon je me suis bloqué sur une partie et j'ai besoin de votre aide
    Bon j'ai le résultat suivant:

    interface FastEthernet 0
    description TREL_TM1657

    je dois enregistre 1 données le mot qui suit "descrption" et en même temps garder le numero après "_TM"

    Bon pour le mot j'arrive à le récupérer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    do{
                     ch = (char)in.read();
                     sb.append(ch);
                  }while(!sb.toString().contains("description"));
    if(sb.toString().contains("description")){
                  sb = new StringBuffer();            
                 do{               
                  ch = ( char )in.read();
                  sb.append(ch);       
                 }while(ch!=10 && ch!=13 );
     
                      client=sb.toString();
    le 10 et le 13 c'est à dire le saut de la ligne il va lire jusq'au description et il prend le mot suivant avant le saut de la ligne
    Le problème c'es que je veux qu'il relit ce sb jusqu'à _TM et prendre le nombre qui est attaché

    Comment puis-je faire çà
    Merci et bonne journée

  2. #2
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Utilise plutôt une expression régulière.
    tu définis un modèle de chaîne de caractères à trouver :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String modelMot = "[A-Z]{4}_TM";
    String modelNumber = "_TM[0-9]{4}";
    [A-Z]{4}_TM veut dire "une chaîne de caractères majuscules compris entre A et Z qui doit avoir une longueur de 4 et qui est suivie par _TM"
    [0-9]{4} veut dire "une chaîne de chiffres compris entre 0 et 9 qui doit avoir une longueur de 4 et qui est précédée par _TM"

    on assemble et on compile le modèle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    String tout = "(" + modelMot + ")|(" + modelNumber + ")";
    Pattern pattern = Pattern.compile(tout);
    on lance la recherche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    String capture = "interface FastEthernet 0 description TREL_TM1657";
    Matcher matcher = pattern.matcher(capture);
    on récupère :
    le groupe 1 correspond à la 1ère recherche
    le groupe 2 correspond à la seconde recherche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If (matcher.find()) {
       System.out.println(matcher.group(1));
       System.out.println(matcher.group(2).substring(3));
    }
    Le résultat doit être :
    TREL_TM
    1657


    note : j'ai ajouté .substring(3) au group(2) car sinon cela aurait fait _TM1657
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  3. #3
    Membre éclairé
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2013
    Messages : 286
    Par défaut
    Merci bien mais moi j'ai pas juste cette données je teste sur plusieurs et il ne contiennent pas la même structures 4 lettre _TM et 4 chiffres
    par exemple j'ai cette chaine :
    TRESORERIE_DGT_L2L_TM1657

    et je dois récupérer le dernier nombre après le _TM

    et pour les expressions régulière je trouve que c'est compliqué d'appliquer çà au niveau de mon code puisque je travaille avec les SB et j'ai pas bien compris comment utiliser celà

    Si vous voulez m'aider à résoudre ce problème parcque çà fait 2 jrs que je essaye et j'arrive pas à le faire

  4. #4
    Membre éclairé
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2013
    Messages : 286
    Par défaut
    et pour string capture=""
    pour moi je dois prendre ce qui est dans le stringBuffer je dois prendre le dernier numéro après la _TM donc pourquoi vous avez écrit toute cette chaine ??

  5. #5
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Donc, si je comprend bien, tu peux avoir dans ta chaîne :
    "interface FastEthernet 0 description TRESORERIE_DGT_L2L_TM1657"
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  6. #6
    Membre éclairé
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2013
    Messages : 286
    Par défaut
    Non moi au début je récupère ce qui suit le mot description je le résupére
    et je fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    System.out.print(sb);
    Alors ce sb je dois le tester s'il contient le _TM à la fin je dois récuperer le nombre attacher à lui

  7. #7
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Si tu ne veux pas utiliser les expressions régulières alors
    en supposant que tu as "TRESORERIE_DGT_L2L_TM1657" dans ton sb,
    pour récupérer 1657 il faut repérer l'endroit où se trouve "_TM" puis prendre les 4 chiffres suivants :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            String chaine = sb.toString();
            int pos = chaine.indexOf("_TM") + 3 ;
            System.out.println(chaine.substring(pos, 4));
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  8. #8
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Oui enfin bon... Il y a aucune raison d'utiliser StringBuffer. Les regex c'est la bonne solution.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre éclairé
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2013
    Messages : 286
    Par défaut
    non çà marche pas c'est quoi le ,3 ???

  10. #10
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Les regex c'est la bonne solution
    oui, c'est beaucoup plus fiable, mais @cisco.nat n'est pas à l'aise avec les regex.
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  11. #11
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Citation Envoyé par cisco.nat Voir le message
    non çà marche pas c'est quoi le ,3 ???
    le 3 c'est pour "passer après" le "_TM"

    Poste le dernier code que tu as utilisé
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  12. #12
    Membre éclairé
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2013
    Messages : 286
    Par défaut
    Si pour moi je fais n'importe quoi l'essentiel c'est d'avoir le résultat correct
    parce que moi j'ai pas toujours dans le nombre 4 chiffres il y'a plusieurs nombre pour chaque résultat et de même le string capture= est ce que je peux le faire sur le stringBuffer obtenue

  13. #13
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Est-ce que tu veux dire que parfois tu as :
    • "TRESORERIE_DGT_L2L_TM16"
    • "TRESORERIE_DGT_L2L_TM165"
    • "TRESORERIE_DGT_L2L_TM1657"

    ?

    Tu peux nous poster un exemple de fichier que tu dois importer ?
    parce que vois-tu, c'est un peu difficile de tout deviner au fur et à mesure.
    Merci
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  14. #14
    Membre éclairé
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2013
    Messages : 286
    Par défaut
    non le stringbuffer est différent pas just le numero
    TRESORERIE_DGST_L2L_TM165765
    CLient23_TM6578
    Acimat8_Le_TM998
    ...

  15. #15
    Membre éclairé
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2013
    Messages : 286
    Par défaut
    Donc voilà le code pour comprendre un peu de quoi s'agit il

    je lance la commande unix
    puis je commence par parcourir le résultat et le code que je veux faire et après le test sur description c'est à dire après le if(desc...)

    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
     
     try {
         readUntil1("show run int Fa0/0.596");
         while(true) {
             do{
     
                     ch = (char)in.read();
                     sb.append(ch);
                  }while(!sb.toString().contains("_TM") && !sb.toString().contains("description") && ch!='#' && !sb.toString().contains("%"));
             if(sb.toString().contains("%"))
             {
                 System.out.print("Invalid Input\n");
                 sb = new StringBuffer();
             }
             else if(sb.toString().contains("#"))
             {
                 in.close();
                 out.close();
                 return "";
             }
             else
                 if(sb.toString().contains("description")){
                  sb = new StringBuffer();            
                      do{   
                  ch = ( char )in.read();
                  sb.append(ch);         
                 }while( ch!=10 && ch!=13 );
     
                      client=sb.toString();
                      configData[0]=client;
                   System.out.print("La description du client est"+client);
     
                    sb=new StringBuffer();
     
                  do{               
                  ch = ( char )in.read();
                  sb.append(ch);       
                 }while(!sb.toString().contains("ip vrf forwarding") && !(sb.toString().contains("ip address ")) && !(sb.toString().contains("xconnect ")) && !(sb.toString().contains("_TM")) && !(sb.toString().contains("#")));

  16. #16
    Membre éclairé
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2013
    Messages : 286
    Par défaut
    et voilà le résultat de la commande que je parcours son résultat avec ces tests

    #sh run int Fa0/0.596
    Building configuration...

    Current configuration : 150 bytes
    !
    interface FastEthernet0/0.597
    description TRESORERIE_DGST_L2L_TM165767
    encapsulation dot1Q 597


    Donc le sb pour description renvoi çà: TRESORERIE_DGST_L2L_TM165767
    alors je dois ensuite récupèrer le numero à la fin de _TM

  17. #17
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    si dans ton sb tu as "TRESORERIE_DGST_L2L_TM165767"
    sachant que le numéro a une longueur variable alors tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            String chaine = sb.toString();
            int pos = chaine.indexOf("_TM") + 3 ;
            Sring number = chaine.substring(pos);
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  18. #18
    Membre éclairé
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2013
    Messages : 286
    Par défaut
    Enfiiiiiiiiiiiiiiiiinf merci merci merci beaucoup et désolé pour le dérangement
    bonne fin de journée à vous

  19. #19
    Membre éclairé
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2013
    Messages : 286
    Par défaut Récupérer un stringbuffer
    Bonjour

    je veux récupérer un stringBuffer mais j'ai deux cas

    1:YAG_TAG_TM454654
    2: THE_Voix_TM13610_Resi_TM14907

    j'ai fais le code pour récupérer si j'ai un résultat comme le premier cas
    mais parfois j'ai un résultat comme le 2eme cas
    et le code que j'ai fait va récupérer le dernier numéro
    alorse que moi je dois récupérer le premier c'est à dire 13610
    c'est à dire le premiet TM
    voilà le code pour récuperer le numero mais dans le cas du dernier numéro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    String chaine = sb.toString();
            int pos = chaine.indexOf("_TM") + 3 ;
            String number = chaine.substring(pos);
    Merci de m'aider

  20. #20
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    tu veux dire que le code récupère uniquement le dernier numéro et pas le premier ?
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

Discussions similaires

  1. Réponses: 9
    Dernier message: 25/03/2011, 13h55
  2. Récupérer StringBuffer dans une autre classe
    Par jacko2 dans le forum Débuter avec Java
    Réponses: 14
    Dernier message: 14/03/2008, 15h23
  3. Récupérer 10 nb différents avec un calcul aléatoire
    Par BXDSPORT dans le forum Langage
    Réponses: 3
    Dernier message: 04/08/2002, 02h35
  4. Réponses: 11
    Dernier message: 23/07/2002, 14h33
  5. Comment récupérer une adresse MAC ?
    Par psau dans le forum Développement
    Réponses: 7
    Dernier message: 19/07/2002, 17h26

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