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 :

fonction mal faite ?


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2009
    Messages
    598
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 598
    Points : 628
    Points
    628
    Par défaut fonction mal faite ?
    Bonsoir^^
    quelqu'un saurait ce qui provoque une erreur dans le programme ?
    Apparemment ça arrive dés que la fonction separe() est appelée.

    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    type
      Tmaliste = array of ShortString;
      TForm1 = class(TForm)
        Label2: TLabel;
        Button1: TButton;
        Edit1: TEdit;
        procedure FormCreate(Sender: TObject);
     
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
      temp:ShortString;
      tableau:Tmaliste;
     
    implementation
     
    {$R *.DFM}
     
    //... Sépare les mots d'une chaine qui sont liés par le séparateur indiqué .....................
    function separe(chaine : ShortString; sep : char): Tmaliste;
    var i,m:integer;
        phrase,mot:ShortString;
        car:char;
    begin
      temp:='''';
      phrase:=chaine;
      m:=0;
      if (chaine<>'''') then
      begin
        mot:='''';
        for i:=0 to (length(phrase)-1) do
        begin
          car:=phrase[i];
          if (car=sep) then
          begin
            result[m]:=mot;
            inc(m);
            temp:=temp+mot+'' '';
            mot:='''';
          end else mot:=mot+car;
        end;
      end;
      Form1.Label2.caption:=temp;
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Edit1.text:=''pied*velo*auto*train*'';
      temp:=Edit1.text;
      tableau:=separe(temp,''*''); // ERREUR ici !
    end.
    Cliquez ici et reprenez le pouvoir !
    A bas IE !, Google, et le pistage du net, testons DuckDuckGo.com
    Lords Of The Realm II Download : Lords of the realm 2
    Infos en anglais :Ici

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 429
    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 429
    Points : 5 836
    Points
    5 836
    Par défaut
    salut

    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
    44
    45
    //... Sépare les mots d'une chaine qui sont liés par le séparateur indiqué .....................
    function separe(chaine : ShortString; sep : char): Tmaliste;
    var 
      i          : integer;
      mot : ShortString;
      car            : char;
    begin
      temp:='';
      if (chaine<>'') then
      begin
        mot:='''';
        for i:=1 to pred(length(chaine)) do
        begin
          car:=chaine[i];
          if (car=sep) then
          begin
              
                setlength(result,length(result)+1);
                result[high(result)]:=mot;
                    
                temp:=temp+mot+' ';
                mot:='';
          end 
          else 
            mot:=mot+car;
        end;
      end;
      if trim(mot) <> '' Then
      begin
       
        setlength(result,length(result)+1);        
        result[high(result)]:=mot;
        temp:=temp+mot+' ';
        mot:='';
            
      Form1.Label2.caption:=temp;
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Edit1.text:='pied*velo*auto*train';
      temp:=Edit1.text;
      tableau:=separe(temp,'*'); 
    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

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 431
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 431
    Points : 1 327
    Points
    1 327
    Par défaut Erreur !
    Bonjour,

    @ Anapurna, je viens de tester ta fonction, mais si elle ne provoque plus d'erreur à la compilation, le résultat dans le label est incomplet.

    En effet si,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Edit1 := 'pied*velo*auto*train';
    on devrait obtenir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Label1.caption := 'pied velo auto train';
    et on obtient avec ta fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Label1.caption := 'pied velo auto trai';
    Il manque 1 caractère soit le dernier !

    @+,

    Cincap

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 431
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 431
    Points : 1 327
    Points
    1 327
    Par défaut Je propose ceci !
    @ Anapurna, avec ceci c'est correct, sans aucune fonction :

    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
    procedure TForm1.BTestClick(Sender: TObject);
    var
    MaListe: TStringList;
    i: Integer;
    cont: string;
    valeur: string;
    begin
    MaListe:=TStringList.Create;
    
    cont := Edit1.text; // ou = à  'pied*velo*auto*train';
    
    MaListe.Text:=StringReplace(cont,'*',#13#10,[rfReplaceAll]);
    for i:= 0 to MaListe.Count-1 do begin
    valeur:= MaListe.Strings[I];
    ShowMessage(valeur);
    end;
    FreeAndNil(MaListe);
    end;
    ou modifier ta fonction :

    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
    function separe(chaine : ShortString; sep : char): Tmaliste;
    var
      i          : integer;
      mot : ShortString;
      car            : char;
    begin
      temp:='';
      if (chaine<>'') then
      begin
        mot:= ''; // et non '''';
        for i:=1 to pred(length(chaine)+1) do
        begin
          car:=chaine[i];
          if (car=sep) then
          begin
    
                setlength(result,length(result)+1);
                result[high(result)]:=mot;
                    
                temp:=temp+mot+' ';
                mot:='';
          end
          else 
            mot:=mot+car;
        end;
      end;
      if trim(mot) <> '' Then
      begin
       
        setlength(result,length(result)+1);
        result[high(result)]:=mot;
        temp:=temp+mot+' ';
        mot:='';
    
     Form1.Label1.caption:=temp;
    end;
    end;
    @+,

    Cincap

  5. #5
    Membre confirmé

    Inscrit en
    Novembre 2002
    Messages
    744
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 744
    Points : 500
    Points
    500
    Par défaut
    salut,

    ou aussi ..
    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
     
    //---------------------------------------------------------------------
    procedure ExtraitInfo(sep:char;chaine:string; var resultat:Tstringlist);
    var temp:string;
        P:integer;
    begin
       while chaine<>'' do
       begin
           temp:=chaine;
           P:=pos(sep,chaine);
           if P=0 then chaine:=''
           else
           begin
               delete(chaine,1,P);
               delete(temp,P,length(chaine));
           end;
           resultat.Add(temp);
       end;
    end;
    //---------------------------------------------------------------------
     
    // test
    procedure TForm1.Button1Click(Sender: TObject);
    var L:Tstringlist;
        i:integer;
    begin
        L:=Tstringlist.Create;
        ExtraitInfo('*','toto*tata*tutut*yyiy',L);
        for i:=0 to L.count-1 do memo1.Lines.add(L[i]);
        L.Free;
    end;
    Bye et bon code...

    Ce n'est pas tant l'aide de nos amis qui nous aide , mais notre confiance dans cette aide .

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 431
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 431
    Points : 1 327
    Points
    1 327
    Par défaut Excellent !
    @ petitcoucou31, il faut un Tmemo et non Tedit pour l'utilisation de ta fonction, sinon c'est correct.

    Elle peut s'appliquer avec un Tedit ?

    @+,

    Cincap

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/03/2007, 13h43
  2. Filtre mal fait
    Par Jaimelot dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 15/03/2007, 18h38
  3. Fonction mal appelée ?
    Par Dsphinx dans le forum Langage
    Réponses: 3
    Dernier message: 21/11/2006, 16h15
  4. fonction qui fait le tri d'une Table de BDD
    Par devlopassion dans le forum C++Builder
    Réponses: 7
    Dernier message: 03/10/2006, 15h28
  5. Réponses: 1
    Dernier message: 18/05/2006, 16h00

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