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

C++Builder Discussion :

Comment afficher la dernière ligne d'un fichier dans une EditBox avec TStringList ?


Sujet :

C++Builder

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut Comment afficher la dernière ligne d'un fichier dans une EditBox avec TStringList ?
    Bonjour,

    la question peut paraitre bien bête, mais je ne vois pas comment la réaliser !!!

    Les lignes dans mon fichier sont du type : 4,00 2,1 23,6 ...
    Ce sont des valeurs séparées par un espace.

    J'aimerai afficher par exemple la première valeur de la dernière ligne de mon fichier dans un EditBox en utilisant TStringList !!!!

    Quelqu'un serait il comment il faut procéder ???



  2. #2
    Membre expérimenté
    Avatar de bakaneko
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 268
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 268
    Points : 1 427
    Points
    1 427
    Par défaut
    Voyons si j'ai bien compris :
    Disons que la dernière ligne de ton fichier corresponde à ton exemple (donc 4,00 2,1 23,6).
    Tu veux donc afficher 4,00 dans un TEdit.

    Si ce n'est pas ça, réexpliques

    Sinon, tu peux faire ceci :
    -Récupération de la dernière ligne de ton TStringList dans un AnsiString
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AnsiString aData = sgList->Strings[sgList->Count-1];
    -Récupération de la position de ton première espace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int iPos = aData.AnsiPos(" ");//pas sûr du caractère pour l'espace
    -Découpage du morceau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AnsiString aPart = aData.SubString(1,Pos);//vérifier si l'espace n'est pas pris en compte, je ne suis plus sûr
    -Affichage de la donnée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Edit->Text = aPart;
    Nb : Normalement, le code est bon mais je n'ai pas la possibilité de tester en l'état..

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    Oui, c'est bien ça bakaneko !!!

    par exemple la dernière ligne est : 4,00 2,10 23,6 0954

    Pour afficher le "23,6", je devrai faire comme ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    AnsiString DataTemperature = Fichier->Strings[Fichier->Count-1];
    int iPosTemperature = DataTemperature.AnsiPos(" ");
    AnsiString Temperature = DataTemperature.SubString(11,iPosTemperature);
    EditTemperature->Text = Temperature;
    Et le "0954" veut dire 09h54 (c'est l'heure et minutes).
    Pour afficher dans un EditBox "09h54", il faudrait que je mette le curseur avant le "0" puis que je prenne les 2 premiers chiffres, mettre un "h" et ensuite le "54" à la suite ???



  4. #4
    Membre expérimenté
    Avatar de bakaneko
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 268
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 268
    Points : 1 427
    Points
    1 427
    Par défaut
    Le code que je t'ai fourni ne peut que retrouver le premier élément de ta ligne.
    Si tu regardes l'aide de la méthode AnsiPos, tu remarques qu'il te retourne la position de la première occurrence du caractère passé en paramètre.
    Si tu veux trouver un autre élément, tu devras faire du découpage de chaine (en utilisant les méthodes AnsiPos et Delete de la classe AnsiString).
    Si tu veux ajouter un caractère dans ton morceau du chaine, regardes du côté de la méthode Insert de la classe AnsiString.

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 390
    Points : 1 777
    Points
    1 777
    Par défaut
    Salut !

    Comme ici tu as vraissemblablement une structure connue tu pourrais développer une classe en dérivant de TComponent.
    Donc une classe dotée d'autant de propriétés du type AnsiString que necessaire à cette structure.
    Ensuite définir un constructeur avec comme paramètre une chaine AnsiString.
    Développer pour cette classe une méthode qui vient tronquer la chaine initiale.
    Et une autre méthode pour initialiser un objet à partir d'une autre chaine.
    Ca permettrait d'avoir une vision bien plus claire !

    Si je reprends ton exemple, on sait qu'il existe un nombre de champs déterminés :

    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
     
    class jProbe : public TComponent
    {
    protected:
        AnsiString __fastcall Extract(AnsiString *N);
     
    public :
    //exemple donné : 4,00 2,10 23,6 0954
    AnsiString Val1;
    AnsiString Val2;
    AnsiString Temp;
    AnsiString Time;
        __fastcall jProbe(TComponent *AOwner);
        __fastcall jProbe(TComponent *AOwner, AnsiString AString);
        __fastcall ~jProbe();
     
        void __fastcall Init(AnsiString AString);
    };

    Voici les méthodes :

    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
     
    __fastcall jProbe::jProbe(TComponent *AOwner)
        : TComponent(AOwner)
    {
    }
     
    __fastcall jProbe::jProbe(TComponent *AOwner, AnsiString AString)
        : TComponent(AOwner)
    {
    Init(AString);
    }
     
    __fastcall jProbe::~jProbe()
    {
    }
     
    AnsiString __fastcall jProbe::Extract(AnsiString *N)
    {
    AnsiString A;
    int p = N->Pos(" ");
    if(p != 0)
        {
        A = N->SubString(1, p-1);
        *N = N->SubString(p+1, N->Length());
        }
    else
        {
        A = *N;
        *N = "";
        }
    return A;
    }
     
    void __fastcall jProbe::Init(AnsiString AString)
    {
    AnsiString N = AString;
    Val1 = Extract(&N);
    Val2 = Extract(&N);
    Temp = Extract(&N);
    Time = Extract(&N);
    if(Time.Length() == 4)
        {
        Time = Time.SubString(1,2) + " H " + Time.SubString(3,4);
        }
    }
    A partir de là, ta classe est prète à l'emploi !
    Donc à l'usage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Probe = new jProbe(this);
    //...
    Probe.Init(Une_chaine);
    Ou bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Probe = new jProbe(this, Une_chaine);
    Ensuite, tu en fait ce que tu en veux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Edit1->Text = Probe->Time;
    Cette façon de faire de permet de bien séparer les traitements.
    Par contre... libre à toi de faire autrement !

    A plus !

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    Ok, merci henderson.

    Mais j'ai des erreurs à la compilation : nom de type attendu, déclaration mutiple, ...

    Comment ça se fait ?

    J'ai une classe principale avec ma Form et là il faut bien faire une nouvelle unité pour le traitement du fichier ?



  7. #7
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 390
    Points : 1 777
    Points
    1 777
    Par défaut
    Salut !

    Sans doute parce que tu as oublié d'inclure le .h de cette unité dans celle qui s'en sert ! Et comme une erreur en entraine d'autres ...

    Il n'est pas indispensable d'utiliser une unité supplémentaire.
    La classe jProbe peut être déclarée juste avant la classe de la form dans le .h de cette dernière tandis que les méthodes seront rédigées dans le .cpp de la form.
    Cette classe n'est pas très conséquente en terme de lignes !

    A plus !

Discussions similaires

  1. [MySQL] comment afficher un nom à côté d'un id dans une liste avec relation ?
    Par clavier12AZQSWX dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/04/2013, 12h24
  2. [PowerShell] Comment afficher la dernière ligne d'un fichier CSV ?
    Par johnvlesk dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 09/11/2010, 21h47
  3. Réponses: 1
    Dernier message: 27/04/2009, 19h04
  4. comment afficher la nième ligne d'un fichier?
    Par dhay06 dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 10/05/2008, 13h20
  5. Comment lire la dernière ligne d'un fichier text.
    Par Ardely dans le forum Delphi
    Réponses: 29
    Dernier message: 20/01/2007, 23h29

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