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

Lazarus Pascal Discussion :

Transfert StringList vers ListBox [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre averti
    Avatar de Jlmat
    Homme Profil pro
    Consultant en Ressources Humaines, Retraité passionné de programmation
    Inscrit en
    Avril 2008
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant en Ressources Humaines, Retraité passionné de programmation
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 290
    Points : 317
    Points
    317
    Par défaut Transfert StringList vers ListBox
    Bonjour,

    J'extrais les champs d'une ligne comprenant la structure d'un fichier de messagerie (Orange ici). J'obtiens bien l'extraction des 103 champs que j'écris dans une StringList. Mais lorsque je les affiche dans une listBox, il y a un champ vide qui apparait. Je ne sais pas comment faire pour ne pas enregistrer ce champ vide. Il a lieu lorsque j'ai fini la boucle d'extraction et que je rajoute le dernier champ de la liste...

    Nom : Aide14.jpg
Affichages : 88
Taille : 89,8 Ko

    Je mets en pièce jointe le fichier de la structure StructOrange.txt
    Voici le code des deux procédures utilisées:

    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
     
    {-----------------------------------------------------------------}
    procedure TForm2.SpdBtnCalculClick(Sender: TObject);
     var i : integer;
    begin
       if Assigned(ListChamps) then
       begin
         ListChamps := fExtractChamps(FicTest,Sep);
         EdNb.Text  := inttostr(ListChamps.Count);
         if ListChamps.Count > 1 then
         begin
            LBChamps.Items.Add('Liste des champs du Fichier '+ExtractFileName(FicTest)+' : '+CR);
            for i := 0 to ListChamps.Count - 1 do
            begin
              LBChamps.Items.Add(ListChamps[i]);
              if Length(ListChamps[i]) = 0 then showmessage('C''est bien un champ vide qui est lu en '+inttostr(i)+'ème position !');
            end;
         end;
       end else MessageDlg('La Liste des champs n''a pas été créee!',mtInformation,[mbOk],0);
    end;
    Et voici la boucle d'extraction:

    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
     
    {--- Fournit une StringList des champs extraits du Fichier fourni -------------}
    Function fExtractChamps(aFic : String; aSep : ShortString) : TStringList;
    Var Ftxt   : TextFile;
        LigOrg : String;
        P      : Integer;
        Champ  : ShortString;
    begin
      If not fileexists(aFic) then Exit;
      AssignFile(Ftxt,aFic);
      P := -1;
      Try
       Result := TStringList.Create;
       reset(Ftxt);
       Readln(FTxt, LigOrg);
       Repeat
         if P <> 0 then
         begin
           P     := AnsiPos(aSEP,LigOrg);
           Champ := Copy(LigOrg,1,P - 1);
           result.Add(Champ);
         end;
     
         if P > 0 then LigOrg := Copy(LigOrg,P + 1,Length(LigOrg) - P);
     
       until P = 0;
     
       result.Add(LigOrg);
     
      finally
        CloseFile(Ftxt);
      end;
    end;
    Voilà, si vous avez une idée de pourquoi, il enregistre un champ vide?
    Merci d'avance
    Je programme en Lazarus 3.2.2 sous windows 10 pro

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

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

    Tiens, cadeau, je te laisse adapter :

    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
    procedure Split(const Delimiter: Char; Input: string; const Strings: TStrings);
    begin
       Assert(Assigned(Strings)) ;
       Strings.Clear;
       Strings.Delimiter := Delimiter;
       Strings.DelimitedText := Input;
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    var i : integer;
        sl: TStringList;
    begin
      sl := TStringList.Create;
      sl.LoadFromFile(FicTest);
      //showmessage(sl.Text);
      split(',', sl.Text, ListChamps);
      for i := 0 to ListChamps.Count-1 do
        LBChamps.Items.Add(inttostr(i+1)+'  '+ListChamps[i]);
    // "i+1" parce que c'est + sympa, pour nous humains, de commencer une liste par "1"
      Edit1.Text := inttostr(ListChamps.Count);
      sl.Free;
    end;
     
    procedure TForm1.FormActivate(Sender: TObject);
    begin
      FicTest := '/tmp/StructOrange.txt';
      Sep := ',';
      ListChamps := TStringList.Create;
    end;
    Et tu noteras que tu n'as que 102 lignes !

    Nom : copie_début.png
Affichages : 54
Taille : 18,4 Ko Nom : copie_fin.png
Affichages : 52
Taille : 17,1 Ko

    Enjoy,
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  3. #3
    Membre averti
    Avatar de Jlmat
    Homme Profil pro
    Consultant en Ressources Humaines, Retraité passionné de programmation
    Inscrit en
    Avril 2008
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant en Ressources Humaines, Retraité passionné de programmation
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 290
    Points : 317
    Points
    317
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Yep !

    Tiens, cadeau, je te laisse adapter :
    Et tu noteras que tu n'as que 102 lignes !
    Merci Jipété,

    Oui, 102 champs, j'ai compté ma ligne vide...
    Super code condensé... J'avoue que je suis obligé d'étudier ta fonction Split, performante mais pas évidente à la première lecture. Elle fait l'économie de plusieurs lignes de codes...

    Bon, ma ligne vide, je ne vois pas trop, une subtilité qui m'échappe...
    Je mets quand même résolu car mon but était d'avoir une liste sans erreurs...
    Je programme en Lazarus 3.2.2 sous windows 10 pro

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 757
    Points : 15 169
    Points
    15 169
    Par défaut
    Bonjour,

    Citation Envoyé par Jlmat Voir le message
    Super code condensé... J'avoue que je suis obligé d'étudier ta fonction Split, performante mais pas évidente à la première lecture.
    le problème, c'est que l'aide n'est absolument pas à jour :
    quand je cherche tstrings.delimitedtext ou delimitedtext ça ne trouve rien :
    Nom : delimitedtext.png
Affichages : 44
Taille : 27,2 Ko
    alors que sur le web tout devient lumineux : https://www.freepascal.org/docs-html...mitedtext.html


    Et inversement j'ai découvert des options documentées dans l'aide qui ne sont plus accessibles à la complétion, comme par exemple stringgrid.InvalidateGrid ou stringgrid.UpdateSelectionRange !
    Le fichier d'aide :
    Nom : lhelp_invalidategrid.png
Affichages : 42
Taille : 69,9 Ko

    La complétion :
    Nom : invalidate.jpg
Affichages : 43
Taille : 55,3 Ko

    Confirmation par une recherche de InvalidateGrid dans Grids.pas :
    Nom : invalidategrid_notfound.png
Affichages : 44
Taille : 11,9 Ko

    Le temps qu'on perd avec ces (mettre ici le gros mot de votre choix)...
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  5. #5
    Membre averti
    Avatar de Jlmat
    Homme Profil pro
    Consultant en Ressources Humaines, Retraité passionné de programmation
    Inscrit en
    Avril 2008
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant en Ressources Humaines, Retraité passionné de programmation
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 290
    Points : 317
    Points
    317
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Bonjour,

    le problème, c'est que l'aide n'est absolument pas à jour :
    quand je cherche tstrings.delimitedtext ou delimitedtext ça ne trouve rien :
    ...
    alors que sur le web tout devient lumineux : https://www.freepascal.org/docs-html...mitedtext.html

    Et inversement j'ai découvert des options documentées dans l'aide qui ne sont plus accessibles à la complétion, comme par exemple stringgrid.InvalidateGrid ou stringgrid.UpdateSelectionRange !
    Le fichier d'aide :
    ...
    Le temps qu'on perd avec ces (mettre ici le gros mot de votre choix)...
    Oui, c'est sûr, c'est amusant parce j'ai justement utilisé tstrings.delimitedtext qui n'est pas limité à un seul caractère!
    Perso, j'utilise souvent le lien suivant : https://smartpascal.github.io/help/assets/
    Je programme en Lazarus 3.2.2 sous windows 10 pro

  6. #6
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 862
    Points : 11 312
    Points
    11 312
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par jipété
    (mettre ici le gros mot de votre choix)
    Trop de choix tue le choix
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

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

Discussions similaires

  1. [XL-MAC 2011] Transfert d'une listbox vers cellules excel en ligne
    Par Sylvie BASTIEN dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 20/09/2013, 19h57
  2. Transfert d'un tableau vers listbox ou combobox
    Par ucfoutu dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 17/07/2009, 20h00
  3. [débutant]Groupbox vers Listbox
    Par tchouk dans le forum Delphi
    Réponses: 1
    Dernier message: 30/06/2006, 00h01
  4. drag et drop de listbox vers listbox
    Par genius_.net dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 11/05/2006, 12h06
  5. Réponses: 7
    Dernier message: 01/12/2005, 15h30

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