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 :

fonction renvoyant un tableau en argument


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Profil pro
    Informaticien
    Inscrit en
    Septembre 2002
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Septembre 2002
    Messages : 69
    Points : 63
    Points
    63
    Par défaut fonction renvoyant un tableau en argument
    Salut,

    J'ai besoin d'une fonction de type explode en PHP
    Mon probléme est comment renvoyé un tableau en argument de la fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function explode(chaine:string):string;
    var
    i:integer;
    begin
            i:=0;
            while (i<length(chaine)) do
            begin
                    if (chaine[i]=' ') then break;
                    i := i+1;
            end;
            Result := copy(chaine,1,i);
    end;
    Pour l'instant j'ai fait ca pour commencer.
    Maintenant j'aimerai récuperer le reste de la chaine et placer le resultat dans un tableau
    merci

  2. #2
    Membre éclairé
    Avatar de hachesse
    Inscrit en
    Mars 2002
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 189
    Points : 651
    Points
    651
    Par défaut
    Ne cherche pas à reinventer la roue.

    Il y a la function ExtractStrings(Separators,WhiteSpace:TSysCharSet;ContentChar;Strings:TStrings):Integer; qui le fait deja

  3. #3
    Membre chevronné
    Avatar de Pierre Castelain
    Inscrit en
    Avril 2002
    Messages
    523
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 523
    Points : 1 943
    Points
    1 943
    Par défaut
    Je ne suis pas complètement d'accord, quand on débute il peut être bon de "réinventer la roue" dans la mesure où cela permet d'approfondir sa connaissance du langage.
    Ton code pourrait ressembler à ceci:
    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
     
    type
      TStringArray = array of string;
     
    function Explode(chaine: string): TStringArray;
    var
      i, p, ndx: Integer;
    begin
      chaine:= Trim(chaine);
      SetLength(result, 0);
      i:=1; // Le premier caractère d'une chaîne est le numéro 1
      p:=1;
      ndx:= 0; // Index de la chaine dans le tableau retourné
      while i <= Length(chaine) do
      begin
        if chaine[i] = ' ' then
        begin
          SetLength(result, Length(result) + 1);
          result[ndx]:= Copy(chaine, p, i - p);
          p:= i + 1;
          Inc(ndx);
        end;
        Inc(i);
      end;
      if p <> i then
      begin
        SetLength(result, Length(result) + 1);
        result[ndx]:= Copy(chaine, p, i - p);
      end;
    end;

  4. #4
    Membre du Club
    Profil pro
    Informaticien
    Inscrit en
    Septembre 2002
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Septembre 2002
    Messages : 69
    Points : 63
    Points
    63
    Par défaut
    Merci pour la solution.

    J'avais mal cherché mais j'ai trouvé ensuite.

    je ne reinvente pas la roue mais ce sont des fonctions assez simples a coder et qui effectivement me permettent de me familiariser avec le langage.
    Personnelement j'ai débuter avec le C et je me sens plus a l'aise lorsque je sais ce qui se passe et c'est plus simple finnalement d'utiliser des outils fait sur mesure.

    Merci quand même pour cette fonction parce que le plus dur c'est quand même de trouver la fonction qu'on a besoin

  5. #5
    Membre éclairé
    Avatar de hachesse
    Inscrit en
    Mars 2002
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 189
    Points : 651
    Points
    651
    Par défaut
    Je sais, j'ai un peu ce défaut de cherche 10 minute dans la doc une fonction deja ecrite plutot que de passer 5 minutes a la codée, mais rassurée vous quand meme, cela n'a rien a voir avec les feignatises. (efin si un peu quand meme )

  6. #6
    Membre à l'essai
    Inscrit en
    Mai 2002
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 11
    Points : 12
    Points
    12
    Par défaut
    Voici une version amélioré de la fonction que Pierre à donner.
    Elle permet d'étendre les possibilités de la fonction en permettant de choisir le caractère de séparation, le caractère par defaut étant l'espace :

    La fonction ne renvoie que les chaine supérieur ou égal à 1 caractère.
    Cela permet de corriger un oublie dans la fonction de pierre qui ne test pas la validité de la chaine et augmente quoiqu'il arrive l'array de 1.

    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
     
    type 
      TStringArray = array of string; 
     
    function Explode(chaine: string; Sep:Char=' '): TStringArray;
    var i, p, ndx: Integer;
         S:String;
    begin
      SetLength(Result, 0);
      p:=1;
      ndx:= 0; // Index de la chaine dans le tableau retourné
      for i:=1 to Length(chaine) do begin
          if chaine[i] = Sep then begin
              S := Copy(chaine, p, i - p);
              if (i-p)>0 then begin
                 SetLength(Result, Length(Result) + 1);
                 Result[ndx]:= S;
                 Inc(ndx);
              end;
              p:= i + 1;
          end;
      end;
      if (i-p)>0 then begin
         SetLength(Result, Length(Result) + 1);
         Result[ndx]:= Copy(chaine, p, i-p);
      end;
    end;
    Bon developpement.

    kyle.
    Quand on veux, on peut !
    C'est juste une question de volonter

  7. #7
    Membre du Club
    Profil pro
    Informaticien
    Inscrit en
    Septembre 2002
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Septembre 2002
    Messages : 69
    Points : 63
    Points
    63
    Par défaut
    Merci bien, ca me fait trois version maintenant.

    J'avais pensé aussi au caractére délimiteur mais pas a la validité des chaines

Discussions similaires

  1. [VBA-E] Fonction renvoyant un tableau
    Par glycerine dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 26/03/2013, 22h27
  2. Une fonction renvoyant un tableau
    Par Touffe54 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/12/2010, 21h21
  3. Fonction renvoyant un tableau VB5
    Par jaymzwise dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 28/08/2007, 15h01
  4. Fonction renvoyant un tableau :
    Par spyk dans le forum Delphi
    Réponses: 3
    Dernier message: 01/09/2006, 15h32
  5. [VB6] [Syntaxe] Fonction renvoyant un tableau d'objets
    Par Troopers dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 18/10/2002, 15h33

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