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

Langage Delphi Discussion :

case avec string


Sujet :

Langage Delphi

  1. #1
    Membre actif
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Points : 217
    Points
    217
    Par défaut case avec string
    bon soir
    ya t'il une fonction en delphi ressemble à la fonction selectcase de vb.
    car je veut que l'element de choix soit un string,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TForm1.Button2Click(Sender: TObject);
    var m :string;
    begin
    m:=edit1.Text;
    begin
    case  m of
     
    'janvier': showmessage('janvier');
    'fevrier': showmessage('fevrier');
     
    end;
    end;
    mais le message d'erreur "ordinal type required"

  2. #2
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 307
    Points
    2 307
    Par défaut
    salut;

    ben oui et voici ça syntaxe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    var
         v :integer;
         m : string;
     
    case v of
       1 : m := 'Janvier';
       2 : m := 'Février'
       .
       .
       .  
     else 
       m := 'n''importe quoi ....'
    end;
    Tout ça est bien détailler dans l'aide, n'hésites pas à faire un tour "F1 très utile"
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  3. #3
    Membre éprouvé
    Avatar de CapJack
    Homme Profil pro
    Prof, développeur amateur vaguement éclairé...
    Inscrit en
    Mars 2004
    Messages
    624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Prof, développeur amateur vaguement éclairé...
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 624
    Points : 988
    Points
    988
    Par défaut
    Il n'y a pas de case avec string en Pascal... la variable doit être de type scalaire (entier, caractère, ensemble, etc.).

    Éventuellement tu peux utiliser des tableaux de chaînes et écrire une boucle.

  4. #4
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 307
    Points
    2 307
    Par défaut
    Très juste mais on peut toujours contourne le problème comme dans l'exemple que je viens de donner. L'important c'est dans la finalité de ce que l'on cherche.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  5. #5
    Membre confirmé
    Avatar de JP.NUAGE
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    769
    Détails du profil
    Informations personnelles :
    Âge : 81
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 769
    Points : 542
    Points
    542
    Par défaut
    Voiulà une petite astuce pour ton pb
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    m:=edit1.Text;
    case  m[1] of
       'j','J': showmessage('janvier');
       'f','F': showmessage('fevrier');
       'm','M' :  case m[3] of
                        'r','R' : showmessage('Mars');
                        'i','I' : showmessag('Mai');
                     end;
     
     end;
    end;
    Je pense que tu résoudras sans problème le cas de janvier (juin, juillet), et de avril (aout).

    Je l'ai testé : ca fonctionne

    Bon code
    A+
    Ce qui se conçoit bien s'énonce clairement
    Et les mots pour le dire viennent aisément (Boileau)

  6. #6
    Membre confirmé
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Février 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Belgique

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2006
    Messages : 537
    Points : 460
    Points
    460
    Par défaut
    Voici une autre astuce:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    case AnsiIndexStr(Edit1.Text, ['janvier', 'février', 'mars']) of
          0: showmessage('janvier');
          1: showmessage('février');
          2: showmessage('mars');
         -1: showmessage('J''sais pô');
       end;
    André
    Ils ne savaient pas que c'était impossible, alors ils l'ont fait !

  7. #7
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 431
    Points : 5 837
    Points
    5 837
    Par défaut
    salut

    tu peut aussi utilise un TStringList


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    case StrLst.indexOf(MonMois) of
          0: showmessage('janvier');
          1: showmessage('février');
          2: showmessage('mars');
         -1: showmessage('J''sais pô');
       end;
    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  8. #8
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Bonjour,

    Tiens voiçi deux autres façons de faire un Case Of avec des String :

    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
    Comment faire un Case Of avec des String ? 
     
    auteur : sjrd 
    Etant donné que la structure Case Of requiert une donnée de type ordinal, il est impossible de faire un Case Of directement avec des String.
    L'astuce consiste à utiliser la fonction AnsiIndexStr de l'unité StrUtils : 
    uses StrUtils;
    ...
    case AnsiIndexStr(Str, ['Chaîne1', 'Chaîne2', 'Chaîne3']) of
      0 : // Str = 'Chaîne1'
      1 : // Str = 'Chaîne2'
      2 : // Str = 'Chaîne3'
      -1 : // Str ne vaut aucune de ces trois chaînes
    end;
     
     
    Si votre version de Delphi ne propose pas cette fonction, elle peut être implémentée comme suit : 
    function AnsiIndexStr(AText : string; const AValues : array of string) : integer;
    begin
      Result := 0;
      while Result <= High(AValues) do
        if AValues[Result] = AText then exit
        else inc(Result);
      Result := -1;
    end;
     
     
    Une autre idée, dans le cas d'un Case Of dynamique, est d'utiliser un objet de type TStrings et sa méthode IndexOf
    ... et voiçi une solution que j'ai récupérée un jour sur le site torry :

    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
    ...use Strings in Case statements? Ok marche	
    Author: RaverJK 	
     
    {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     
    CaseOfString: Diese Funktion ermöglicht es einem, einen case-Verteiler
    mit Strings zu realisieren.
     
    CaseOfString: This function enables you to realize a case block
    using strings.
     
    +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
     
    function CaseOfString(s: string; a: array of string): Integer;
    begin
    Result := 0;
    while (Result < Length(a)) and (a[Result] <> s) do
    Inc(Result);
    if a[Result] <> s then
    Result := -1;
    end;
     
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    case CaseOfString(Edit1.Text, ['42', '23', 'nerd alert', 'hello world']) of
    0: Label1.Caption := 'What is six times nine?';
    1: Label1.Caption := 'Nichts ist, wie es scheint...';
    2: Label1.Caption := 'BATMAAAAAAAN!';
    3: Label1.Caption := 'Hello people.';
    else
    Label1.Caption := '?';
    end;
    end;
    A+
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  9. #9
    Membre actif
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Points : 217
    Points
    217
    Par défaut remereciment aux camarades

    salus camarades ,je suis trés heureus de votres participations et votre proposotions .
    je passe mes salutation a tous les amis . c'est resolus

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

Discussions similaires

  1. [PHP-JS] case avec plus et moins a coté
    Par budiste dans le forum Langage
    Réponses: 13
    Dernier message: 29/11/2005, 14h09
  2. probleme de case avec un u_short
    Par [thebadskull] dans le forum C
    Réponses: 4
    Dernier message: 06/11/2005, 16h32
  3. Cocher une case avec affichage automatique
    Par Toff !!!!! dans le forum Access
    Réponses: 3
    Dernier message: 27/09/2005, 13h36
  4. Erreur compilation avec <string>
    Par seal3 dans le forum SL & STL
    Réponses: 9
    Dernier message: 25/08/2005, 20h41
  5. [Struts][logic:iterate] Probleme avec String
    Par julienOriano dans le forum Struts 1
    Réponses: 7
    Dernier message: 15/06/2004, 09h39

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