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 :

lire un fichiers texte


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 89
    Par défaut lire un fichiers texte
    Je veux lire un fichier texte et afficher par exemple le premiers élément dans un édit pour voir si il a bien lit le fichier ou pas car il existe pas de consol dans builder C++

    Alors voila mon code dans le en clique de bouton

    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
     
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    int vect[6];
    TStringList *L;
    L=new TStringList();
    if (FileExists("C:\Users\ACER\Desktop\Projet\test.txt"))
    {
    L->LoadFromFile("C:\Users\ACER\Desktop\Projet\test.txt");
    for(int i=0; i<2; i++)
    vect[i]=StrToInt(L->Strings[i]);
    }
     
    Edit1->Text= vect[1];
     
    }
    Mai après l’exécution il affiche 0 dans l’édit et non la valeur d’édit !! Aider moi SVP

  2. #2
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 89
    Par défaut
    le probleme aiter dans le chemain ( \\ ) le probleme maitenant que j'ai des donner de ce type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    4.150454e+000
    4.446479e+000
    2.200351e+000
    1.861601e-001
    3.909361e+000
    2.755779e+000
    4.132143e+000
    et il veux pas les lir avec le meme code

    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
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    double vect[600];
    TStringList *L;
    L=new TStringList();
    vect[1]=123;
    if (FileExists("C:\\Users\\ACER\\Desktop\\Projet\\C3.txt"))
    {
    L->LoadFromFile("C:\\Users\\ACER\\Desktop\\Projet\\C3.txt");
    for(int i=0; i<2; i++)
    vect[i]=StrToInt(L->Strings[i]);
    }
     
    Edit1->Text= vect[1]; // affichez dans un edit
     
     
    }

  3. #3
    Invité
    Invité(e)
    Par défaut
    La fonction de conversion que tu appelles, StrToInt(), convertit une chaîne (Str) en entier (Int). Si tu veux convertir des nombres réels, il va te falloir quelque chose comme StrToFloat()

    Francois

  4. #4
    Membre Expert

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Par exemple :

    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
     
    TStringList *Fichier;
    AnsiString Filepath;
    AnsiString Filename = "Test.TXT";
    //Un tableau dynamique
    int NbValeurs;
    double *Valeurs=NULL;
     
    //--
    __fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
    {
    Filepath = ExtractFilePath(Application->ExeName);
    Fichier = new TStringList;
    }
     
    //-- rajouter la déclaration du destructeur dans la classe
    __fastcall TForm1::~TForm1()
    {
    delete Fichier;
    if(Valeurs != NULL) delete [] Valeurs;
    }
     
    //--
    void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
    {
    int p, j;
    char d = DecimalSeparator;
    DecimalSeparator = '.';
     
    AnsiString N = Filepath + Filename;
     
    if(FileExists(N))
        {
        Fichier->LoadFromFile(N);
        NbValeurs = Fichier->Count;
        if(NbValeurs == 0)
            {
            ShowMessage("Le fichier est vide");
            }
        else
            {
            if(Valeurs != NULL) delete [] Valeurs;
            Valeurs = new double[NbValeurs];
            for(j = 0; j < NbValeurs; j++)
                {
                N = Fichier->Strings[j];
                p = N.Pos(",");
                if(p != 0) N[p] = DecimalSeparator;
                Valeurs[j] = N.ToDouble();
                }
            }
        }
    else
        {
        ShowMessage("Le fichier est introuvable");
        }
    DecimalSeparator = d;
    }

    Si par contre la conversion ToDouble devait générer une exception, dans ce cas il faudrait gérer avec un try... (cas où le fichier est tout... sauf ce que l'on en attend).

    A plus !

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2006
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 89
    Par défaut
    pour faire des traitement sur des donner par exemple cherches leur moyenne es que je utilise les chiffre avec la virgule (x,xx) ou avec le point (x.xxx ) ??

    J’utilise Valeurs ? , et comment je peut prendre que 4 valeur après la virgule ?

  6. #6
    Membre Expert

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    Le problème du séparateur décimal est ici résolu (indifféremment : '.' ou ',') testé avec :

    4,150454e+000
    4,446479e+000
    2,200351e+000
    1.861601e-001
    3,909361e+000
    2,755779e+000
    4,132143e+000
    4.476479e-001
    4.150501e+000
    Personnellement, je préfère utiliser un tableau dynamique parce que plus souple qu'un tableau prédéfini (cas où le tableau serait trop petit par rapport au fichier) !
    Sa création et sa destruction ne posent aucun problème particulier !
    A ce stade, les doubles y sont stockés prêts à être exploités (le séparateur décimal n'intervient qu'au niveau des Ansistring) !

    Le résultat peut être tronqué à l'affichage (sans toucher à la valeur elle-même), voir l'aide : AnsiString::FormatFloat.

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    double sum =0.0;
    for(j=0; j < NbValeurs; j++)
        {
        sum+=Valeurs[j];
        }
    sum = sum / NbValeurs;
    Label1->Caption = FloatToStr(sum);
    Label2->Caption = FormatFloat("#,##0.000", sum);
    A plus !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/12/2005, 15h57
  2. [Applet] lire un fichier texte
    Par lebesnec dans le forum Applets
    Réponses: 2
    Dernier message: 07/07/2005, 10h09
  3. Réponses: 1
    Dernier message: 24/11/2004, 16h54
  4. [Fichier] Lire un fichier texte long
    Par _Eric_ dans le forum Entrée/Sortie
    Réponses: 9
    Dernier message: 18/08/2004, 15h22
  5. Réponses: 2
    Dernier message: 26/05/2004, 17h53

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