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 :

Extraire les données d'une TStringList


Sujet :

Delphi

  1. #1
    Membre du Club Avatar de Chakalaka
    Inscrit en
    Octobre 2007
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 152
    Points : 66
    Points
    66
    Par défaut Extraire les données d'une TStringList
    Salut,

    Je suis vraiment désolé pour la question bête que je vais poser

    Chaque chaine de ma TStringList est composée de 7 cases comme suit:
    A, B, C, D, E, F, G

    Quand j'affiche le contenu d'une chaine à l'aide du membre Text j'ai le résultat suivant 00001000045
    Ma question est comment accèder à chaque case de ma TStringList ?

    J'ai essayé un
    j'ai l'erreur suivante
    Project projet.exe raised exeption class EStringListError with message 'List index out of bounds (5)'.
    Idem pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaTStringList.ValueFromIndex[2];
    J'aimerais préciser qu ces erreurs n'apparaissent pas si je met [0]

    Merci enormement pour votre aide

  2. #2
    Membre confirmé
    Avatar de alheuredudejeuner
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2005
    Messages : 376
    Points : 632
    Points
    632
    Billets dans le blog
    4
    Par défaut
    déjà il faut se placer sur l'élément de la stringlist qui intéresse

    ensuite, c'est un texte

    sur ce site :

    http://delphi.developpez.com/faq/?pa...aracterechaine

    André

  3. #3
    Membre du Club Avatar de Chakalaka
    Inscrit en
    Octobre 2007
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 152
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par alheuredudejeuner Voir le message
    ensuite, c'est un texte

    sur ce site :

    http://delphi.developpez.com/faq/?pa...aracterechaine

    André

    Merci infiniment pour ta réponse mais je pense que je ne me suis pas bien expliqué

    En effet, ma TStringList contient des chaines chaque chaine contient ses propres enregistrements.
    Je m'explique à l'aide d'un exemple, J'ai une TStringList contenant la liste de certains pays, et dans chaque pays on a une liste de départements (plusieurs champs) associés. Donc si je fais MaTStringList[0] je vais avoir le premier pays uniquement or que moi je veux accèder à tel champ de tel pays

    Merci

  4. #4
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    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
    procedure TForm1.Button7Click(Sender: TObject);
    Const
      Path = 'C:\Temp\toto.txt';
    var
      StList: TStringList;
      i: Integer;
      Line : String;
    begin
      if FileExists(Path) then
      begin
        StList := TStringList.create;
        Try
          StList.LoadFromFile(Path);
          for i := 0 to StList.Count - 1 do
          Begin
            //ShowMessage(StList.Strings[i]);
            ShowMessage(StList.Strings[i]);
            Line := StList.Strings[i];
            ShowMessage(Line[3]); // <= Exemple sur troisième lettre de chaque ligne
          end;
        Finally
          StList.free;
        end;
    
      end;
    end;
    @+

  5. #5
    Membre du Club Avatar de Chakalaka
    Inscrit en
    Octobre 2007
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 152
    Points : 66
    Points
    66
    Par défaut
    Merci pour la réponse
    Malheureusement , ça ne fait pas mon affaire puisque cet exemple me retournerai caractère par caractère. Je voudrais préciser à l'aide du membre Namesle nom de mon champs (exemple MaTStringList.Names('Departement') du permier pays) Je ne sais vraimet pas comment utiliser values, names, indexOfName .... pour ce genre de chaine 2D

    Merci encore une fois

  6. #6
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Ben voui mais voici une illustration qu'une image vaut mille mots...

    Si tu prends le temps de nous donner un exemple précis et clair... notre réponse en sera de même.

    Donc donne deux ou trois exemples !

    @+

  7. #7
    Membre du Club Avatar de Chakalaka
    Inscrit en
    Octobre 2007
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 152
    Points : 66
    Points
    66
    Par défaut
    Vos souhaits sont des ordres

    J'ai une TStringList contenant des équipes de travails (chaque ligne est une équipe de travail), chaque équipe est caractérisé par un nombre de champs dans mon cas j'ai 7: A, B, C, D, E, F, G

    Actuellement dans ma DB j'ai une seule équipe de travail (Finances) si je veux afficher tous les détails de cette équipe je fais
    Code delphi : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ShowMessage(MaTStringList.text);

    J'ai l'affichage suivant
    00001000045 (Notez le code de couleur le champ G Contient l'information 00045)

    J'essaye en vain d'extraire le contenu du dernier champ (le 00045)

  8. #8
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Autrement dit, tu souhaites obtenir les cinq derniers caractères ?


  9. #9
    Membre du Club Avatar de Chakalaka
    Inscrit en
    Octobre 2007
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 152
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par Droïde Système7 Voir le message
    Autrement dit, tu souhaites obtenir les cinq derniers caractères ?

    C'est trop risqué le hardcodé comme ça il faut vraiment que j'ai accès à ces champs de manière individuelle puisque je compte faire des test (if) dessus

  10. #10
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Line := StList.Strings[i];
    De cette façon tu accèdes à chaque ligne de ta StringList.

    Tu peux alors tester tout ce que tu souhaites.

    @+

  11. #11
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 344
    Points : 3 122
    Points
    3 122
    Par défaut
    Bonjour,

    comme dit Droïde, tu récupère chaque ligne que tu décodes

    Il faut que la structure de chaque ligne soit fixe (toujours le même nombre de caractères pour A, B, C, ... )

    Sinon, si le nombre de caractères de A, B, C, ... est variable tu ne peut rien faire. Tu ne pourras jamais récupérer la valeur de G

    Cordialement

    Charly

  12. #12
    Membre du Club Avatar de Chakalaka
    Inscrit en
    Octobre 2007
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 152
    Points : 66
    Points
    66
    Par défaut
    En bout de ligne oui je n'ai qu'à récupérer mes strings dans un autre string que je vais traiter par la suite.

    La raison pour laquelle je ne pourrais pas utiliser de values, names, indexOfName ... est que mes équipes de travail sont des string et pas des TSringList (Le code existant a été fait ainsi), ainsi mes MaTStringList[0] me retournera un string qui doit être traiter comme un string

    Merci énormement pour votre aide

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

Discussions similaires

  1. [3.0.2]Extraire les données d'une requête vers un flux sortant
    Par lazarel dans le forum Développement de jobs
    Réponses: 1
    Dernier message: 26/11/2008, 09h16
  2. Réponses: 2
    Dernier message: 24/10/2008, 08h04
  3. Réponses: 9
    Dernier message: 28/05/2008, 15h29
  4. Réponses: 1
    Dernier message: 26/01/2007, 08h15
  5. Comment classer les données d'une TStringList ?
    Par cmickyplus dans le forum Langage
    Réponses: 2
    Dernier message: 25/06/2005, 16h44

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