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

C++Builder Discussion :

recherche mot entre deux délimiteurs


Sujet :

C++Builder

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 385
    Points : 288
    Points
    288
    Par défaut recherche mot entre deux délimiteurs
    Bonjour,
    je suis un peu bloqué dans mon problème:
    en résumé: j'ai un texte de cette forme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    
    
    
    hdsjskkdk>MOT1<kjdshfksjdfks...........>MOT2<dfkjhsdfkj.........................>MOTi<.................
    je cherche une méthode pour extraire ces tockens {mot1, mot2,.....} qui sont délimités par '>' et '<' .


    merci d'avance pour vos aides.
    « Aucun homme ne peut rien vous révéler sinon ce qui repose déjà à demi endormi dans l'aube de votre connaissance»

    « No man can reveal to you aught but that which already lies half asleep in the dawning of your knowledge »_(¯`·.__-Alg3ri4nH4ck3r-__.·´¯)_

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 573
    Points : 713
    Points
    713
    Par défaut
    Salut
    Ben c est faisable

    Tu traites ton fichier entier comme une seule chaine
    Tu remplaces eventuellement les sauts à la ligne par rien
    Tu inities x varaibels
    La premiere sera le premier > rencontré :A
    La seconde sera le premier < rencontré : B
    La troisieme sera le debut de traitement de la chaine , c est à dire , la seconde +1 : C = 0 ( ou 1 , faut voir , pas sur )
    La quatrime de type bool qui dit refaire : d

    Ecris ensuite une fonction qui recupere les positions et extrait dans une boucle
    for ( D= 0 ; D <= tachaine.length , D++ ) // à corriger , mais pas tres dur
    for ( int J = A , j <= B , j++ ) { if ( ... ) {bla bla bla ; C = B ; A = A + C ; ajouter dans stringlist ; }}
    Voilà

  3. #3
    Membre expérimenté
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Points : 1 307
    Points
    1 307
    Par défaut
    Un petit bout de code à optimiser, mais qui devrait fonctionner:
    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
      TStringList *wordList = new TStringList();
      TStringList *fileSL = new TStringList() ;
      fileSL->LoadFromFile( "C:\\test.txt" ) ;
      int count = 1 ;
      int index1 = 0 ;
      int total = 1 ;
     
      do
      {
        //ON RECHERCHE LE PROCHAIN '>'
        index1 = (fileSL->Text.SubString(total, fileSL->Text.Length() ) ).Pos(">") ;
        if(index1==0) break;
        //ON REPLACE L'INDEX GENERAL
        total = index1 + total + 1 ;
        //ON RECHERCHE LE PROCHAIN '<'
        count = (fileSL->Text.SubString(total, fileSL->Text.Length() ) ).Pos("<") ;
        //ON RECUPERE LE MOT ET ON L'AJOUTE A LA LISTE
        AnsiString tmp = fileSL->Text.SubString(total-1,count )  ;
        wordList->Add( tmp ) ;
      }while( (index1 != 0)) ;
      delete fileSL ;
     
    //AFFICHAGE DES MOTS TROUVÉS
      for( int i=0; i< wordList->Count; i++)
        ShowMessage( wordList->Strings[i] ) ;
     
      delete wordList ;
    Ce que l'on apprend par l'effort reste toujours ancré plus longtemps...

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 78
    Points : 81
    Points
    81
    Par défaut
    Bonjour,

    Je me trompe, ou tu es en train de développer un analyseur XML ?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 573
    Points : 713
    Points
    713
    Par défaut
    ouais on dirait bien

    sinon pour parser du xml
    t as un composant ou çà : http://khayyam.developpez.com/articles/cpp/tinyxml/

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2006
    Messages : 78
    Points : 81
    Points
    81
    Par défaut
    ou encore TXMLDocument si tu utilises BCB6

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 573
    Points : 713
    Points
    713
    Par défaut
    Ben oui un composant mais apparemment il n est pas une perle de stabilité

    Beaucoup preferent utiliser la librairie

  8. #8
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 374
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 374
    Points : 1 759
    Points
    1 759
    Par défaut
    Salut !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #include <stdio.h>
     
    AnsiString Filename;
    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
     
    FILE *File = fopen(Filename.c_str(), "rb");
    fseek(File, 0, SEEK_END);
    int longueur = ftell(File);
    fseek(File, 0, SEEK_SET);
    char *Source = new char[longueur];
    fread(Source, 1, longueur, File);
    fclose(File);
     
    TList *List = new TList;
    char *s = Source;
    char *token = NULL;
    char *max = s + longueur;
    char c;
    while(s < max)
        {
        c = *s;
        if(c == '>')
            {
            s++;
            token = s;
            }
        else
            {
            if((c == '<') && (token != NULL))
                {
                *s = 0;
                // a)
                List->Add(token);
                // b)
                Memo1->Lines->Add(token);
                // c)
                if( strcmp(token, "chat")) Panel1->Color = clRed;
                // ...
     
                token = NULL;
                }
            s++;
            }
        }
     
    List->Clear();
    delete List;
    delete Source;
    A plus !

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    385
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 385
    Points : 288
    Points
    288
    Par défaut
    Bonjour tout le monde,

    merci un milliard de fois pour vos réponses,

    en fait mon travail consistait à envoyer des requetes web puis récuperer le code HTML de la page web résultante de la requête, puis à partir de ce code HTML extraire quelques informations.
    Dans mon cas, ces information ce trouvent entre les balises ('>' et '<').

    merci Handerson pour ton code, il tourne impécablement.
    « Aucun homme ne peut rien vous révéler sinon ce qui repose déjà à demi endormi dans l'aube de votre connaissance»

    « No man can reveal to you aught but that which already lies half asleep in the dawning of your knowledge »_(¯`·.__-Alg3ri4nH4ck3r-__.·´¯)_

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

Discussions similaires

  1. [WD14] Recherche d'un mot entre deux textes
    Par wojc01 dans le forum WinDev
    Réponses: 6
    Dernier message: 09/11/2009, 19h38
  2. [XL-2000] Somme de recherche V entre deux dates
    Par gocho dans le forum Excel
    Réponses: 3
    Dernier message: 03/06/2009, 15h37
  3. [WD12] recherche enregistrements entre deux bornes
    Par cgr_007 dans le forum WinDev
    Réponses: 2
    Dernier message: 28/03/2009, 22h40
  4. [VB.Net 2.0] - Regex chercher un mot entre deux ?
    Par troxsa dans le forum Framework .NET
    Réponses: 8
    Dernier message: 20/02/2007, 22h04
  5. [RegEx] Supprimer le contenu qui se trouve entre deux délimiteurs
    Par goldyfruit dans le forum Langage
    Réponses: 8
    Dernier message: 23/01/2007, 20h34

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