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 :

Comment récupérer des valeur séparé par ; ?


Sujet :

Delphi

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 66
    Points : 45
    Points
    45
    Par défaut Comment récupérer des valeur séparé par ; ?
    Bonjour a tous! J'apprend a l'école le langague Pascal et on fait des Applications Consoles pour débuter...

    J'ai réussi a écrire dans un fichier csv des valeur comme pa exemple Valeur1;Valeur2;Valeur3;

    Après jai réussi a lire la ligne, mais je sais pas comment faire pour récupéré seulement ce quil y a entre les ;

    Voila, si qq'1 pourrait m'aidé...

    Merci d'avance

  2. #2
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    Une solution assez simple est de remplacer les ';' par des retour chariots, et de mettre la ligne dans un TStirngList.

    Chaque ligne de la liste contiendra une colonne.

    ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    MaListe := TStringList.Create;
    MaListe.Text := StringReplace( LaChaine, ';', #13#10, [rfReplaceAll] );
    // La liste est à jour, tu fais ton traitement, stockage etc...
    MaListe.Free
    Coté Perf, c'est peut etre pas le plus optimisé, mais ca conviendra dans la plupart des cas et c'est simple.

    Bon code!

  3. #3
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 853
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 853
    Points : 15 273
    Points
    15 273
    Par défaut
    Yep !

    Sinon, tu cherches IsDelimiter et/ou LastDelimiter dans l'aide, ça devrait faire ton bonheur !
    Mes 2 cts,
    --
    jp

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 563
    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 563
    Points : 25 165
    Points
    25 165
    Par défaut List et découpage
    Le plus simple que possible :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function DelimitedTextToStringList(const DelimitedText: string; Delimiter : Char): TStringList;
    begin
       Result := TStringList.Create();
       Result.Delimiter := Delimiter;
       Result.DelimitedText := DelimitedText;
    end;

  5. #5
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 66
    Points : 45
    Points
    45
    Par défaut
    Merci donc j'ai remplacé les ; par des retour à la ligne. Par contre une fois que la chaine est dans ma variable je sais pas comment récupérer chaque ligne.

    Et sinon quand j'essaye de compilé il ne trouve pas TStringList. C'est pas la première fois que j'essaye de mettre des fonction ou autres que je trouve sur internet et qu'il ne reconnait pas. Pourquoi ?

    Voila, merci d'avance!

  6. #6
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Salut
    Un petit sur TStringList t'aurait donné Strings[] pour récupérer les lignes
    et aussi l'unité à ajouter qui contient TStringList...
    Un peu de recherche quand même

  7. #7
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    TStringList est défini dans l'unité Classes. Ajoutes donc cette unité au Uses.

    Pour récupérer une valeur utilise la propriété Strings.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      MaVar := MaStringList.Strings[0];
      // ou 
      MaVar := MaStringList[0];
    Tout est décrit dans l'aide de Delphi !!!
    [edit] Ah Pedro est déjà passé par là ! [/edit]

    @+

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 58
    Points : 44
    Points
    44
    Par défaut
    C'est qu'il faut rajouter les unité qui contiennent ces 'nouvelles' fonctions dans la liste des uses en debut de fichier

    exemple d'utilisation pour une TStringlist
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    unit Unit1;
     
    interface
     
    uses Classes;
    Tu trouve le nom des unité dans la doc de delphi (cherche TStringlist dans ta doc et tu verras en haut de page.

    Sinon pour ta fonction tu peux utiliser la fonction pos (pour recuperer la premiere sous-chaine) puis delete pour la supprimer de ta chaine principale et ainsi de suite jusqu'a avoir toutes tes sous chaines...

    A+

    [edit] Ah Pedro est déjà passé par là ! [/edit] bis

  9. #9
    Membre du Club
    Inscrit en
    Septembre 2006
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 66
    Points : 45
    Points
    45
    Par défaut
    Biensur que j'ai regarder l'aide avant. Mais on m'en dit pas plus. Voilà ce que m'avais dit l'aide avec F1 http://img412.imageshack.us/img412/7...nstitreqk9.jpg

    Et hum avec les class, j'ai mis hum ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    uses
      SysUtils;
      TStringList ;
    Mais la non plus ça ne reconnait pas. Enfin voilà, désolé mais je connais pas encore tout ^^

    Micromalice, jvais essayé du coter de la fonction delete, merci !

  10. #10
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    si tu n'a pas acquis la notion d'unité et de uses, je te conseille d'abord de t'y pencher avant de coder.
    Car tu seras bloqué de la même manière à un moment ou a un autre.

    il ne faut pas mettre TStringList dans la liste des "uses", il faut mettre des nom d'unités
    -> ce nom tu l'as bien dans ta capture, et la classe TStringList apparatient à l'unité "classes", qu'il faut mettre sous le "uses"

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 58
    Points : 44
    Points
    44
    Par défaut
    et pour ta fonction n'utilises pas 'que' delete...
    il faut faire un pos() avant.

  12. #12
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 563
    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 563
    Points : 25 165
    Points
    25 165
    Par défaut Algo pas trop mauvais
    Pos et Delete, un des mes anciens chefs avaient, il y a quelques années, la première chose que l'on remarque c'est que si index est plus grand que le nombre de ";", eh bien ça tourne pour rien,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //Extrait_cle retourne l'élément au rang Index dans la chaine du type 'xxx;yyy;zzz;...'
    function extrait_cle(chaine : string; index : integer) : string;
    var i : integer;
    begin
      for i := 1 to index do
        delete(chaine,1,pos(';',chaine));
      if pos(';',chaine) = 0 then
        result := chaine
      else
        result := copy(chaine,1,pos(';',chaine)-1);
    end;
    Une fonction qui devrait marcher, je viens de la pondre parce que j'aime bien ce genre de problématique ... si vous trouvez des efforts de bord ...

    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
    function GetString(const DelimitedText: string; Delimiter: Char; Index: Integer = 1): string;
    var
      idtb, idte, occ: Integer;
    begin
      if Index <= 0 then
        Index := 1;
     
      idtb := 0;
      idte := 1;
      occ := 0;
      while (idte <= Length(DelimitedText)) and (occ < Index) do
      begin
        if DelimitedText[idte] = Delimiter then
        begin
          Inc(occ);
          if occ < Index then
            idtb := idte;
        end;
        Inc(idte);
      end;
      if (occ > 0) and (idte >= Length(DelimitedText)) then
        Inc(Occ);
     
      if occ = 0 then
        Result := DelimitedText
      else
        if occ =  Index then
          Result := Copy(DelimitedText, idtb+1, idte-idtb-2)
        else
          Result := '';
    end;
    GetString est 2 à 4 fois plus rapide que Extrait_cle, et si Index est trop grand, il n'y a pas de perte de temps ...

  13. #13
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 770
    Points
    2 770
    Par défaut
    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
    57
    58
    59
    60
    61
    unit Unit1;
     
    interface
     
    uses
      Controls, Classes ,Forms,StdCtrls;
     
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Edit1: TEdit;
        Listbox1: TListBox;
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
    type
         TTablString=array of string;
    Function Dechiffre(s:string;d:char):TTablString;
    var
        i,j:integer;
        m:string;
    begin
         SetLength(result,0);m:='';
         j:=0;
         if s[length(s)]<>d then s:=s+d;
         for i:=1 to length(s) do
           begin
             if s[i]<>d then m:=m+s[i]
             else
               if m<>'' then
               begin
                 inc(j);
                 setlength(result,j);
                 result[j-1]:=m;
                 m:='';
               end;
           end;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    var
         i:integer;
         t:TTablString;
    begin
         t:=Dechiffre(edit1.Text,';');
         Listbox1.Clear ;
    //     if length(t)=0 then exit;
         for i:=0 to high(t) do
           Listbox1.Items.Add(t[i]);
    end;
     
    end.

Discussions similaires

  1. Récupérer des mots séparés par un espace dans un .txt
    Par elnino67 dans le forum Débuter
    Réponses: 2
    Dernier message: 28/05/2008, 22h13
  2. Comment récuperer des valeurs renvoyées par Link
    Par 19cmos83 dans le forum Struts 1
    Réponses: 1
    Dernier message: 22/05/2008, 18h09
  3. Comment récupérer des valeurs de configuration
    Par Sergejack dans le forum C#
    Réponses: 5
    Dernier message: 11/02/2008, 15h09
  4. Réponses: 1
    Dernier message: 31/07/2006, 13h54
  5. [PHP-JS] Comment récupérer des valeurs passées en URL?
    Par megapacman dans le forum Langage
    Réponses: 9
    Dernier message: 09/06/2006, 13h09

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