Rapatrier des données d'un fichier avec Borland C++

Signaler
Messages postés
3
Date d'inscription
mardi 2 mai 2006
Statut
Membre
Dernière intervention
1 juin 2006
-
Messages postés
92
Date d'inscription
samedi 26 mars 2005
Statut
Membre
Dernière intervention
23 septembre 2015
-
Je suis en stage actuellement, et j'aborde sur le tas le C++ avec de bonne base en C.
Dans mon projet, je dois enregistrer les données d'un tableau(qui servent à tracer une courbe) dans un fichier .txt
Mais qui dit enregistrement des données, dit rapartriement de celle-ci à un moment ou un autre.
Mon problême se situe à cette endroite. Je ne sais pas comment faire pour récupérer les données, et rapatrier dans un tableau, pour ensuite pouvoir afficher le graphique(en fin de compte l'opération inverse de l'enregistrement!).

Le code pour l'enregistrement est le suivant:

// Chaines de caractères utilisées pour la sauvegarde des fichiers :
chaine1="---> Fichier de Sauvegarde des données spectrales <---";
chaine2=("\r\n--->             "+DateToStr(Date())+" -- "+TimeToStr(Time())+"             <---");
chaine3="\r\n\r\n[Calibration du Spectromètre]";
chaine4=("\r\nPremier Coefficient : "+FloatToStr(coeff1));
chaine5=("\r\nDeuxième Coefficient : "+FloatToStr(coeff2));
chaine6=("\r\nTroisième Coefficient : "+FloatToStr(coeff3));
chaine7=("\r\nNm de Départ : "+FloatToStr(onde_depart));
chaine8="\r\n\r\n[Options Supplémentaires]";
chaine9=("\r\nTemps d'intégration : "+IntToStr(tps_integ));
chaine10=("\r\nNombre de Spectres par Acquisition : "+IntToStr(average));
chaine11=("\r\nPlage de la moyenne mobile : "+IntToStr(boxcar));
AnsiString temp="[Nm]";
temp=temp+("\t[Intensité1]\t[Intensité2]\t[Intensité3]\t[ValeurMoyenne]");
chaine12="\r\n\r\n"+temp;
chaine13="--> Fin <--";

// Sauvegarde de la configuration et des données spectrales dans un fichier :
TFileStream *fichier_bru;
fichier_bru=new TFileStream(fichier/*+IntToStr(1)+"-"+IntToStr(nb_acq)*/+".bru",fmCreate);
fichier_bru->Write(chaine1.c_str(),chaine1.Length());
fichier_bru->Write(chaine2.c_str(),chaine2.Length());
fichier_bru->Write(chaine3.c_str(),chaine3.Length());
fichier_bru->Write(chaine4.c_str(),chaine4.Length());
fichier_bru->Write(chaine5.c_str(),chaine5.Length());
fichier_bru->Write(chaine6.c_str(),chaine6.Length());
fichier_bru->Write(chaine7.c_str(),chaine7.Length());
fichier_bru->Write(chaine8.c_str(),chaine8.Length());
fichier_bru->Write(chaine9.c_str(),chaine9.Length());
fichier_bru->Write(chaine10.c_str(),chaine10.Length());
fichier_bru->Write(chaine11.c_str(),chaine11.Length());
fichier_bru->Write(chaine12.c_str(),chaine12.Length());
for (int col=0;col<2048;col++)
        {
        AnsiString result="\r\n";
        result=result+FloatToStr(lambda[col])+'\t';
        for(int li=0;li<nb_acq;li++)
                {
                result=result+FloatToStr(intensite[li][col])+'\t';
                }
                result=result+FloatToStr(valmoy[col]);
        fichier_bru->Write(result.c_str(),result.Length());
        }
fichier_bru->Write(chaine13.c_str(),chaine13.Length());
delete fichier_bru;

avec lambda[] un tableau de 2048 flottant, valmoy[] idem, et intensite[][] un tableau 2D à ligne variant, et 2048 colonnes.

Merci d'avance pour votre aide!

1 réponse

Messages postés
92
Date d'inscription
samedi 26 mars 2005
Statut
Membre
Dernière intervention
23 septembre 2015

Avec les TFileStream je ne sais pas, par contre moi j'utilise le bon vieux FILE qui se trouve dans stdio, et la ce n'est pas dur car il me semble en plus que tu écris ton fichier ligne par ligne (avec tous ces petits '\n').

string FileName = "c:\bidule.txt";
FILE *_File = fopen(FileName.c_str(), "r");
string ligne;
// tant qu'il y a une ligne à lire dans le fichier
while ((ligne = fgets(tmp, 10000, _File)) != NULL)
{
  // toutes les actions sur la ligne lue dans le fichier (récupération de ce qui t'y intéresse)
  // ...
  // ...
}