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 :

Paramétrage d'un if


Sujet :

Delphi

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2013
    Messages : 10
    Points : 8
    Points
    8
    Par défaut Paramétrage d'un if
    Bonjour !! c'est mon premier post depuis mon inscription j'espère suivre les règles et pas trop en demander .

    Je suis nouveau dans le monde de delphi (version 7), et je me trouve bloquer dans l'optimisation de mon code :

    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
    Var : //Variables globales
    Scan: string='Ceci est un test !';
    test: integer=0;
     
    procedure TForm1.btnEnvoyerClick(Sender: TObject);
    var preDonnee : string;
        i : integer;
    begin
      preDonnee := '';
    for i:=1 to 3 do
      begin
        preDonnee := eEnvoi.text[i]; // Récupère les trois premiers caractères du champs eEnvoi.
      end;
      if preDonnee = 'AAA' then //Test si AAA
        begin
          scan := eEnvoi.text; //On stock la donne dans la variable globale pour un second passage servant au test
          test:=1;//Variable globale passée a une pour un second passage servant au test
          Memo1.Lines.Text := 'Veuillez saisir le BBB à la suite du AAA ';
        end;
      if (test = 1) and (preDonnee = 'BBB') then
        begin
          eEnvoi.text := scan+' '+eEnvoi.text; //On concatène la donnée à la précédente
          scan :='';
          test := 0;
        end
      else if (test = 0) and (preDonnee = 'BBB') then
        begin
           showmessage('Veuillez saisir le AAA avant le BBB');
      end;
    A la fin eEnvoi.text est enregistré dans la BDD, et la donnée envoyé est AAA suivis de chiffres (ex:AAA00067428).

    J'aimerai pouvoir paramétrer mes conditions (AAA/BBB) pour d'autres cas.
    Exemples :
    Si AAA / BBB
    Si CCC / DDD
    Si EEE / FFF
    Si ... / ...

    On m'a parler de fichier .ini et j'ai commencé à me documenter mais je n'avance pas plus pour autant. Donc voilà je sollicite votre aide, si vous avez une quelconque idée pour m'orienté sur ce problème je vous en serai reconnaissant

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 041
    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 041
    Points : 40 950
    Points
    40 950
    Billets dans le blog
    62
    Par défaut
    Bonjour ,

    je présume que ce bout de code a été généralisé ? a tel point d'ailleurs que je n'en vois pas vraiment la fonction !

    première remarque
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for i:=1 to 3 do
      begin
        preDonnee := eEnvoi.text[i]; // Récupère les trois premiers caractères du champs eEnvoi.
      end;
    pourrait avantageusement remplacé par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    predonnee:=copy(eEnvoi.text,1,3)
    A la fin eEnvoi.text est enregistré dans la BDD, et la donnée envoyé est AAA suivis de chiffres (ex:AAA00067428).
    comment en arrive t-on là !?

    pour ce qui est des couples oui effectivement , on pourrait passer par un fichier ini qui contiendrait a peu près ceci :
    [Couples]
    AAA=BBB
    CCC=DDD
    EEE=FFF
    il 'suffirait' alors , à la lecture de la première partie lire a l'intérieur
    par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    uses ... Inifiles ...;
     
     
    Fini:=TIniFile.Create(monfichier.ini);
    ....
    Couple:=FIni.ReadString('Couples',copy(eEnvoi.text,1,3),''); 
    if Length(Couple)=0 
       then Showmessage('Erreur')
       else Memo1.Lines.Text := 'Veuillez saisir le '+Couple+' à la suite du '+copy(eEnvoi.text,1,3);
    ...   
     
    FIni.Free;
    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
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2013
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Merci Sergio.
    Oui, le code est généralisé, il sert lors de la saisie d'un "code" par un utilisateur à enregistrer ce code dans une BDD.
    Si le début du code (3 premières lettres) correspond à un certain Type ('AAA') il faut le second Type associé ('BBB'), on concatène ces deux codes et pour l'enregistrer dans la BDD. Ce qui va donner pour AAB00001 => AAB00001 dans la BDD
    Mais pour AAA00001 => Attente de BBB => BBB00001 => AAA00001 BBB000001 dans la BDD.

    Je n'ai pas mis la suite du code pensant que ça n'avait pas grande importance par rapport au reste, mais je l'ajoute.

    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
    Var: //Variables globales
    preDonnee : string;
    procedure TForm1.btnEnvoyerClick(Sender: TObject);
    var Fini:tIniFile;
      couple : string;
    begin
      FailBDD :=0;
      //Clear du mémo pour éviter la saturation en donnée
      Memo1.Lines.clear;
      predonnee:= predonnee + ' ' +eEnvoi.text;
      Fini:=TiniFile.Create('..\Exo Partie1\Configuration1.Ini');
      Couple:=FIni.ReadString('COUPLES',copy(eEnvoi.text,1,3),'');
      //Si le champ texte n'est pas remplis on préviens l'utilisateur
      If eEnvoi.Text =''
        then ShowMessage('Veuillez renseigner le champ texte')
      else if Length(Couple)=0 then
        Begin
          with ZQuery4 do
          Begin
            Close;
            SQL.Clear;
            SQL.Add('INSERT INTO Tracabilitee (Donnee) VALUES (:Donnee) ');
            ParamByName('Donnee').AsString := predonnee;
            Try ExecSQL;
              except  FailBDD := 1;
                      Memo1.Lines.Clear;
                      Memo1.Lines.Text := 'Erreur, Les informations de la base de donnée saisie ne sont pas bonnes veuillez vous référer à la documentation pour résoudre le problème.';
            end;
          end;
        preDonnee := '';
        end
        else Memo1.Lines.Text := 'Veuillez saisir le '+Couple+' à la suite du '+copy(eEnvoi.text,1,3);
        FIni.Free;
    Je pense avoir résolu mon problème grâce à ton aide en tout cas =) Je te remercie ! (Avec cette méthode je peux faire une ou plusieurs conditions successives, il me suffit juste de bien construire mon .ini : c'est parfait !)

  4. #4
    Membre émérite

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 387
    Points : 2 999
    Points
    2 999
    Par défaut
    Tant mieux si tu as résolu ton problème mais je vais être un peu curieux. Ce code te renvoyait vraiment les 3 premiers caractères de la chaîne ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for i:=1 to 3 do
      begin
        preDonnee := eEnvoi.text[i]; // Récupère les trois premiers caractères du champs eEnvoi.
      end;

  5. #5
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Points : 1 561
    Points
    1 561
    Par défaut
    De toute façon SergioMaster lui a suggéré d'utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    predonnee:=copy(eEnvoi.text,1,3)
    Donc, cela lui règle son problème, mais je pense qu'il l'aurait dans doute rapidement remarqué.

    En revanche, on pourrait peut-être lui conseiller d'utiliser la fonction "Format" pour le formatage de ses chaînes et de ressortir tous les "string" de sa procédure en les plaçant en "resourcestring" et également de scinder cette "big" procédure en plus petites parties, facilitant ainsi la relecture et la maintenance du code.
    Pensez à utiliser les tags dans le titre.
    Avant de poser une question reportez-vous à la FAQ Delphi
    Respectez les règles du forum.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2013
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par Papy214 Voir le message
    Tant mieux si tu as résolu ton problème mais je vais être un peu curieux. Ce code te renvoyait vraiment les 3 premiers caractères de la chaîne ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for i:=1 to 3 do
      begin
        preDonnee := eEnvoi.text[i]; // Récupère les trois premiers caractères du champs eEnvoi.
      end;
    Non il manque bien sur "preDonnee +" avant eEnvoi.text[i]; ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preDonnee := preDonnee + eEnvoi.text[i];
    Sinon il ne récupère que le troisième ^^ (Va savoir pourquoi il n'y était pas =°)

    Citation Envoyé par Pascal Jankowski Voir le message
    En revanche, on pourrait peut-être lui conseiller d'utiliser la fonction "Format" pour le formatage de ses chaînes et de ressortir tous les "string" de sa procédure en les plaçant en "resourcestring" et également de scinder cette "big" procédure en plus petites parties, facilitant ainsi la relecture et la maintenance du code.
    Je commence à m'y mettre mais je ne connaissait pas "Format" et "resourcestring" J'vais y jetter un oeil =)

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

Discussions similaires

  1. [tomcat 5] [paramétrage] fichier de log System.out.println
    Par Aldo dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 22/02/2005, 14h41
  2. [SAX] Chargement d'un fichier de paramétrage
    Par doublep dans le forum Format d'échange (XML, JSON...)
    Réponses: 6
    Dernier message: 05/12/2004, 20h42
  3. [PGA]paramétrage dynamique
    Par phig dans le forum Administration
    Réponses: 2
    Dernier message: 25/10/2004, 17h30
  4. [WAS5] paramétrage serveur
    Par seb-16000 dans le forum Websphere
    Réponses: 11
    Dernier message: 21/06/2004, 12h30
  5. Paramétrage du DBEXTRACT
    Par mikouts dans le forum XMLRAD
    Réponses: 7
    Dernier message: 23/01/2003, 14h49

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