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 :

Manipulation des chaînes d'une StringList.


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 439
    Par défaut Manipulation des chaînes d'une StringList.
    Bonjour,

    Je développe une application dont l'un des traitements consiste à afficher dans un combobox les pistes d'un aéroport avec des données les concernant dans différents labels.
    Je charge ces données à partir d'un fichier ini dont voici le format:
    [AIRPORT]
    ......
    LFPG;CHARLES-DE-GAULLE;392;CDG;49.009722;2.547778 (Structure: Code icao; Nom; Altitude(ft); Code iata; Latitude, Longitude)
    ......
    [RUNWAYS]
    .....
    LFPG;08L;86;13829;148;13829;13829;338;0.1 (Structure: Code icao; N°Piste; Orient. magn.; Longueur; Largeur; Dist. dispo décoll.; Dist. dispo atterr.; Alt. seuil; Pente)
    LFPG;08R;86;8858;197;8858;8858;336;0.2
    LFPG;09L;86;8858;197;8858;8858;378;-0.2
    LFPG;09R;86;13780;148;13780;13780;370;-0.1
    LFPG;26L;266;8858;197;8858;8858;316;-0.2
    LFPG;26R;266;13829;148;13829;13829;318;-0.1
    LFPG;27L;266;13780;148;13780;13780;387;0.1
    LFPG;27R;266;8858;197;8858;8858;392;0.2
    .....

    La sélection de l'aéroport est simple puisqu'elle ne fait appel qu'à une ligne unique par le code icao.
    Pour la sélection des pistes, je charge une Stringlist avec toutes les pistes de l'aéroport choisi plus haut.

    Mon problème est de séparer en sous-chaînes les lignes de la Stringlist afin d'y accéder séparément, genre DelimitedText afin de pouvoir les appeler dans les composants dédiés.

    Auriez-vous une idée simple?

    Merci
    Codialement
    Pierre

  2. #2
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    STOP !

    non sérieux, faut arrêter de faire n'importe quoi. ce n'est pas parce que les données sont sous forme de texte qu'il faut aller les coller dans un TStringList ! ce sont des données structurées il faut donc les traiter comme tel !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    type
      TRunway = record
        ... 
      end;
     
      TAirport = record
        Name: string;
        ICAO : string;
        Runways: TArray<TRunway>;
      end;
     
    var
      Airports: TArray<TAirport>;
    reste plus qu'à écrire une fonction qui charge le fichier dans Airports et là on peut faire des choses sérieuses.



    NB: la même chose peut être faite avec des classes, ça demande juste de gérer l'instanciation et la libération.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    type
      TRunway = class
        ... 
      end;
     
      TAirport = class
        Name: string;
        ICAO : string;
        Runways: TObjectList<TRunway>;
      end;
     
    var
      Airports: TObjectList<TAirport>;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 439
    Par défaut
    Merci beaucoup

    Cordialement
    Pierre

  4. #4
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 173
    Billets dans le blog
    9
    Par défaut
    Bonjour !

    Je ne sais pas si vous avez réussi à mettre en œuvre la solution proposée par Paul (qui est certainement la meilleure) mais comme je joue ces temps-ci avec les expressions régulières, je me suis amusé à traiter votre problème par ce moyen. Je me permets de présenter ma solution. L'expression régulière utilisée pourrait être améliorée, pour une détection plus fine, mais en l'occurrence il semble que le nombre de points-virgules soit un critère suffisant.

    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
    program Exercice_01;
    {$APPTYPE CONSOLE}
     
    uses
      SysUtils,
    {$IF CompilerVersion >= 22.0}
      RegularExpressionsCore;
    {$ELSE}
      PerlRegex; (* http://www.regular-expressions.info/download/TPerlRegEx.zip *)
    {$IFEND}
     
    const
      SAMPLE: array[0..7] of string = (
        'LFPG;08L;86;13829;148;13829;13829;338;0.1',
        'LFPG;08R;86;8858;197;8858;8858;336;0.2',
        'LFPG;09L;86;8858;197;8858;8858;378;-0.2',
        'LFPG;09R;86;13780;148;13780;13780;370;-0.1',
        'LFPG;26L;266;8858;197;8858;8858;316;-0.2',
        'LFPG;26R;266;13829;148;13829;13829;318;-0.1',
        'LFPG;27L;266;13780;148;13780;13780;387;0.1',
        'LFPG;27R;266;8858;197;8858;8858;392;0.2'
    );
     
    var
      r: TPerlRegex;
      s: string;
     
    begin
      r := TPerlRegEx.Create;
      r.RegEx := '(.+);(.+);(.+);(.+);(.+);(.+);(.+);(.+);(.+)';
     
      for s in SAMPLE do
      begin
        r.Subject := s;
        if r.Match then
        begin
          WriteLn('Ligne complète         : ', r.Groups[0]);
          WriteLn('Code ICAO              : ', r.Groups[1]);
          WriteLn('N° piste               : ', r.Groups[2]);
          WriteLn('Orient. magn.          : ', r.Groups[3]);
          WriteLn('Longueur               : ', r.Groups[4]);
          WriteLn('Largeur                : ', r.Groups[5]);
          WriteLn('Distance disp. décoll. : ', r.Groups[6]);
          WriteLn('Distance disp. atterr. : ', r.Groups[7]);
          WriteLn('Alt. seuil             : ', r.Groups[8]);
          WriteLn('Pente                  : ', r.Groups[9]);
        end;
      end;
     
      r.Free;
      ReadLn;
    end.

  5. #5
    Membre Expert
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 542
    Billets dans le blog
    10
    Par défaut
    Bonjour,
    En complément de la directive proposée par Paul tu peux utiliser delimitedtext avec ton TStringList pour décomposer chacune des lignes de ton StringList.
    Voici un lien vers un exemple
    stringlist-and-csv

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

Discussions similaires

  1. Manipuler des objets d'une fonction public
    Par keuloud dans le forum Windows Forms
    Réponses: 3
    Dernier message: 25/11/2009, 14h51
  2. manipulation des données d'une base
    Par grinder59 dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 18/09/2008, 11h26
  3. Manipulation des objets dans une session
    Par facilus68 dans le forum Hibernate
    Réponses: 5
    Dernier message: 28/12/2007, 14h02
  4. Comment Manipuler des objets dans une liste de type TList ?
    Par PadawanDuDelphi dans le forum Delphi
    Réponses: 1
    Dernier message: 02/11/2006, 15h40
  5. Réponses: 13
    Dernier message: 09/05/2006, 16h30

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