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 :

vérifier une condition contenue dans une chaîne de caractères


Sujet :

Delphi

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    246
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 246
    Points : 62
    Points
    62
    Par défaut vérifier une condition contenue dans une chaîne de caractères
    Bonsoir ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Var cond : string ;
    begin
    cond : ='table1.fieldbyname('nom').asansistring='abcd'' ; 
    if cond then traitement
    End ;
    Comment je peux realiser ca ?

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if sametext(table1.fieldbyname('nom').asstring,'abcd') then traitement
    http://docwiki.embarcadero.com/Libra...Utils.SameText
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 455
    Points : 24 867
    Points
    24 867
    Par défaut
    Cette question serait-elle sur une sorte de Pascal Script interprété en RunTime ?
    La réponse est dans la question ci-dessus
    Si tu as du budget TMS Script

    Paul Toth a créé son TokyoScript
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #4
    Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    246
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 246
    Points : 62
    Points
    62
    Par défaut
    Salut ;
    Dans l'application je donne a l'utilisateur la possibilite de definire une condition pour colorer les evenement d'un scheduler puis je stocke cette condition sous forme texte dans une table.
    Ce que je cherche c'est verifier cette condition qui est sous forme de texte, je ne veux pas comparer 2 chaines de caractere.
    Merci bcp

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Ce que je cherche c'est verifier cette condition qui est sous forme de texte, je ne veux pas comparer 2 chaines de caractere.
    il fallait certainement être plus clair, surtout pour un lundi soir. Et commencer aussi, peut-être par indiquer quelle version de Delphi vous utilisez
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  6. #6
    Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    246
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 246
    Points : 62
    Points
    62
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    table1.fieldbyname('cond').asansistring : ='table2.fieldbyname(''start'').asdatetime>table3.fieldbyname(''start'').asdatetime+5' ; 
    .
    .
    {voici ce que je cherche}
    if table1.fieldbyname('cond').asansistring then traitement

  7. #7
    Membre confirmé Avatar de blonde
    Femme Profil pro
    Développeur Delphi
    Inscrit en
    Septembre 2003
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Septembre 2003
    Messages : 278
    Points : 477
    Points
    477
    Par défaut
    Si je comprends bien, tu as un bout de code qui est stocké quelque part, et tu veux pouvoir ré-utilise ce bout de code tel quel à l’exécution ?

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    indiquez quelle version de Delphi vous utilisez
    Je pourrais vous répondre d'utiliser les possibilités de livebindings mais, sans la version c'est chose impossible
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  9. #9
    Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    246
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 246
    Points : 62
    Points
    62
    Par défaut
    J'utilise delphi 10.1 berlin

  10. #10
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 455
    Points : 24 867
    Points
    24 867
    Par défaut
    Citation Envoyé par messahel Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    table1.fieldbyname('cond').asansistring : ='table2.fieldbyname(''start'').asdatetime>table3.fieldbyname(''start'').asdatetime+5' ; 
    .
    .
    {voici ce que je cherche}
    if table1.fieldbyname('cond').asansistring then traitement
    Vous devriez proposer quelques choses de plus simples à votre utilisateur

    table2, table3 déjà cela n'a aucun sens au niveau DB puisque ce sont des variables du Delphi
    Votre éditeur de script devrait fournir un contexte d'exécution précis à votre utilisateur
    fieldbyname, asdatetime tout ça est incompréhensible par l'utilisateur, à vous de générer le code nécessaire et de gérer les méta-data pour gérer types et comparaisons entre type

    votre utilisateur devra saisir ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TableDeux.start > TableTrois.start + 5
    A vous de fournir au moteur de Script le contexte d'exécution, objet, méthode, accesseur ...
    TableDeux et TableTrois ... évidemment il nous faut nous expliquer un peu plus, voir la complexité de donnée mise à disposition de l'utilisateur


    Avez-vous regarder les liens sur les outils de script fourni ci-dessus ?



    Sinon, pourquoi ne pas générer du SQL à partir du fragment fourni par l'utilisateur, avec une petite protection contre l'injection de code, ça peut être un bon départ, c'est en plus très simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TableDeux.start > TableTrois.start + 5
    devient en MySQL par exemple (puisque l'on ne connait pas le SGBD)
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT (SELECT start FROM TableDeux WHERE ... ) > (SELECT start + 5 FROM TableTrois WHERE ... ) 
    FROM DUAL


    Citation Envoyé par SergioMaster Voir le message
    Je pourrais vous répondre d'utiliser les possibilités de livebindings mais, sans la version c'est chose impossible
    Intéressant, des formules simples peuvent être exécuté en RunTime par les livebindings, une piste à suivre
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  11. #11
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    Puisque Berlin il y a, lisez ce tutoriel qui montre comment implémenter des méthodes https://serge-girard.developpez.com/...gs/Episode-2b/
    Toutefois, je plussoie ShaiLeTroll vous proposez à vos utilisateur quelque chose de trop compliqué
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  12. #12
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 455
    Points : 24 867
    Points
    24 867
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Puisque Berlin il y a, lisez ce tutoriel qui montre comment implémenter des méthodes https://serge-girard.developpez.com/...gs/Episode-2b/
    Toutefois, je plussoie ShaiLeTroll vous proposez à vos utilisateur quelque chose de trop compliqué
    Pas mal ce truc, cela attise ma curiosité, je ne fais pas de FMX et quasiment jamais de lien DB<->Controls en VCL puisque je travaille principalement sur des Serveurs type WebSocket+PHP/JS ou sur des utilitaires maison
    Alors voir les Livebindings pour interpréter du code à la volée, ça semble fort sympa ... juste pour jouer à titre perso
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  13. #13
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    cela attise ma curiosité, je ne fais pas de FMX et quasiment jamais de lien DB<->Controls en VCL
    Dans ce cas, ce n'est pas tant des liaisons que l'utilisation de l'interpréteur d'expressions et c'est aussi bien pour FMX que VCL.
    Reste que l'utilisateur devra être renseigné sur la syntaxe et les variables utilisables, cela me parait bien complexe
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  14. #14
    Membre éprouvé
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Points : 1 072
    Points
    1 072
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Puisque Berlin il y a, lisez ce tutoriel qui montre comment implémenter des méthodes https://serge-girard.developpez.com/...gs/Episode-2b/
    Bonjour,

    Toujours un plaisir de lire ce genre de tutos
    c'est pas aussi simple qu'il y parait de produire un tutoriel clair et utile sans compter que c'est chronophage.
    Merci de partager ça

    Toutefois une petite erreur de frappe c'est glissée dans le chapitre VI-B
    Enfin, tout comme vous le feriez pour un objet, n'oubliez pas de libérer cette fonction quand vous n'en avez plus besoin.
    Libérer

    TBindingMethodsFactory.UnRegisterMethod('Reverse');

    Cordialement,

    @+

  15. #15
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    c'est pas aussi simple qu'il y parait de produire un tutoriel clair et utile sans compter que c'est chronophage.
    je confirme
    Toutefois une petite erreur de frappe c'est glissée
    Après tout les va-et-vient entre correcteurs il y aurait toujours des fôtes
    J'espère encore avoir l'original pour le corriger, merci.

    En parlant de correcteurs, j'en manque mes tutos sont coincés en zone de relecture technique du coup j'ai un manque de motivation.
    Tout volontaire courageux serait bienvenu.
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  16. #16
    Expert confirmé Avatar de sergio_is_back
    Homme Profil pro
    Responsable informatique, développeur tout-terrain
    Inscrit en
    Juin 2004
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Responsable informatique, développeur tout-terrain
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 084
    Points : 5 604
    Points
    5 604
    Par défaut
    J'ai trouvé ce petit exemple sur stackoverflow qui utilise les Bindings, il semble assez simple et facile à adapter (je précise bien que je ne l'ai pas testé, mais il me semble correct coté syntaxe) :

    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
     
    program BindingsDemo;
    {$APPTYPE CONSOLE}
     
    uses
      System.Rtti,
      System.Bindings.Expression,
      System.Bindings.EvalProtocol,
      System.Bindings.Helper;
     
    type
      TFoo = class
        Val1: Integer;
        Val2: Integer;
        Result: TValue;
      end;
     
    procedure Main;
    var
      Foo: TFoo;
      scope: IScope;
      expr: TBindingExpression;
    begin
      Foo := TFoo.Create;
      Foo.Val1 := 42;
      Foo.Val2 := 666;
      scope := TBindings.CreateAssociationScope([Associate(Foo, 'Foo')]);
      expr := TBindings.CreateUnmanagedBinding(
        [Scope],
        'Foo.Val1 + Foo.Val2',
        [Scope],
        'Foo.Result',
        nil
      );
      expr.Evaluate;
      Assert(Foo.Result.AsInteger=708);
      Writeln(Foo.Result.ToString);
    end;
     
    begin
      Main;
      Readln;
    end.

  17. #17
    Membre éprouvé
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Points : 1 072
    Points
    1 072
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    ...
    En parlant de correcteurs, j'en manque mes tutos sont coincés en zone de relecture technique du coup j'ai un manque de motivation.
    Tout volontaire courageux serait bienvenu.
    je pense pouvoir libérer un peu de temps en début d'année prochaine
    mais je ne suis pas certain d'avoir toutes les compétences requises à l'accomplissement d'une telle tache.
    Parce que quand je lis tes derniers tutos je suis plutôt du coté élève que correcteur
    Tout dépend de ce que tu attends d'une relecture technique !

    A voir, donc mais oui je serais content de pouvoir y participer.

    Cordialement,

    @+

Discussions similaires

  1. vba excel verifier une chaine de caractere dans une colonne
    Par Marc31 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 22/09/2010, 13h35
  2. [PHP 5.1] verifier si un nombre existe dans une chaine de caractere
    Par moukit233 dans le forum Langage
    Réponses: 2
    Dernier message: 10/11/2009, 17h05
  3. Verifier si une chaine de caractere est situe dans une chaine de caractere
    Par gregounnet dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/07/2007, 15h31
  4. Réponses: 2
    Dernier message: 06/12/2006, 13h36
  5. Condition contenu dans une variable string
    Par tomo0013 dans le forum Access
    Réponses: 6
    Dernier message: 01/12/2005, 14h15

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