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

Delphi Discussion :

Test sur un ensemble de chaîne


Sujet :

Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 26
    Points : 20
    Points
    20
    Par défaut Test sur un ensemble de chaîne
    Hello a tous,

    Mon probleme est simple (enfin pas tant que ca)

    jaimerai faire un test d'une chaine sur un ensemble de chaine en delphi du genre :

    If VarTest in ('a', 'b', 'c') then .....

    en fait les valeurs a,b,c peuvent varier en nombre car elles proviennent dun fichier xml donc un :

    If VarTest = 'a' and VarTest = 'b'..... est impossible car elles mobligerait a generer un code delphi .

    jespere avoir ete assez clair, ya til ce genre de syntaxe en delphi?

    merci.

  2. #2
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour

    Il faudrait en dire un peu plus.

    A priori, il est toujours possible de tester si une chaine est vide et sortir de la boucle à ce moment.

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    si j'ai bien compris...j'utiliserai une TStringList...

    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
     
    procedure TForm1.Button11Click(Sender: TObject);
    var
        FastFind:TStringList;
        ffIndex:integer;
        VarTest:string;
    begin
        FastFind:=TStringList.Create;
        try
            //on rempli la liste
            FastFind.Add('a');
            FastFind.Add('c');
            FastFind.Add('b');
            //On trie la liste pour faire fonctionner Find()
            FastFind.Sort;
     
            VarTest:='b';
            if FastFind.Find(VarTest,ffIndex) then
            begin
                //traitement VarTest est dans la liste
            end
            else
            begin
                //traitement VarTest N'est PAS dans la liste
            end;
        finally
            FastFind.Clear;
            FastFind.Free;
        end;
    end;

  4. #4
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    Bonjour,

    Dans ce cas, j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var VarTest, VarList : string ;
         sep : char ;
    sep:=#1 ;
    varList:=sep+'a'+sep+'b'+sep+'c'+sep ;
    if pos(sep+VarTest+sep,VarList)>0 then // trouvé

  5. #5
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Points : 1 199
    Points
    1 199
    Par défaut
    Ben ça fonctionne, Non ?

  6. #6
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Il y a aussi AnsiIndexStr et AnsiIndexText.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 26
    Points : 20
    Points
    20
    Par défaut
    la solution deric est excellente!
    merci beaucoup

  8. #8
    Membre régulier
    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 156
    Points : 106
    Points
    106
    Par défaut
    Bonjour,

    La solution de la TStringList est bonne. Toutefois, il me semble qu'il y a plus simple que trier la liste de chaines, puis appeler la fonction Find.

    In suffit d'appeler la fonction IndexOf, qui renvoie la position de la chaine dans la liste, ou -1 si la chaine n'est pas dans la liste.

  9. #9
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    Citation Envoyé par JeanMarc_T2k
    Toutefois, il me semble qu'il y a plus simple que trier la liste de chaines, puis appeler la fonction Find.

    In suffit d'appeler la fonction IndexOf, qui renvoie la position de la chaine dans la liste, ou -1 si la chaine n'est pas dans la liste.
    L'utilisation du find devient intéressant dans le cas où il y a beacoup
    de sous chaînes à traiter. Le coût du sort devient négligable et accélère de
    beaucoup la recherche de la présence ou non d'une sous-chaine dans la liste.

    Dans le cas d'une liste triée, la fonction IndexOf() appele Find() qui est beaucoup plus rapide:
    Citation Envoyé par Code Delphi de IndexOf
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function TStringList.IndexOf(const S: string): Integer;
    begin
      if not Sorted then Result := inherited IndexOf(S) else
        if not Find(S, Result) then Result := -1;
    end;
    Si la liste est courte, on pourrait effectivement perdre du temps à faire un trie. Dans ce cas, il me semble plus simple d'utiliser la méthode de Graffito
    qui est beaucoup moins lourde que l'utilisation d'un TStringList.

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

Discussions similaires

  1. [XL-2007] Tests sur une chaîne de caractères
    Par Lucky062 dans le forum Excel
    Réponses: 11
    Dernier message: 01/03/2012, 15h37
  2. Exécuter un test sur un ensemble de données
    Par dourouc05 dans le forum Téléchargez
    Réponses: 0
    Dernier message: 09/11/2010, 20h46
  3. Hachage sans collision sur un ensemble limité et constant de chaîne de caractères.
    Par Benoit_T dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 22/02/2010, 17h27
  4. afficher un ensemble de chaînes chacune sur une ligne
    Par kawther dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 12/09/2009, 21h03
  5. Test sur une chaîne de caractères
    Par ThunderBolt_ dans le forum Général VBA
    Réponses: 4
    Dernier message: 27/06/2007, 06h37

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