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 averti
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 26
    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 : 76
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    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 émérite

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

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    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;
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

  4. #4
    Expert confirmé 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
    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 : 76
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

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

  6. #6
    Expert confirmé

    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 : 35
    Localisation : Suisse

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Par défaut
    Il y a aussi AnsiIndexStr et AnsiIndexText.
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

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

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

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

    Informations forums :
    Inscription : Octobre 2003
    Messages : 156
    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 émérite

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

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    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.
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

+ 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