J'aimerais récupérer les valeurs d'une ligne pour les utiliser après.
Pour l'instant, je fais de cette manière mais c'est vraiment laborieux. Si vous avez une autre solution, je suis preneur.
if (is_readable("C:bddAcoustique.txt")){
ifstream fichier_lu("C:bddAcoustique.txt");
string nom_matiere = "cc"; //l'utilisateur peut demander autre chose que "cc"
string line;
string value;
while(getline(fichier_lu,line)){
if(line.find(nom_matiere)==0){
value = line.substr(0,line.find("n"));
ofstream file("C:fichier2.txt");
file << value;
}
}
ifstream fichier2_lu("C:fichier2.txt");
string str;
double Z[8];
if (!fichier2_lu.eof()) {
for (int i=0; i < 10; ++i) {
string tmp;
fichier2_lu >> tmp;
if (i != 0 && i!=9) {
istringstream iss(tmp);
iss >> Z[i-1];
}
}
}
En fait je lis la ligne qui corespond à "cc" (ou ca peut etre autre chose) et je l'ecris dans un fichier. Ensuite je lis ce nouveau fichier qui contient que la ligne qui m'interesse et je transforme les string en double. Pour chaque ligne, je n'ai besoin que des valeurs 1 à 8.
Merci de me donner un coup de pousse car je suis dans le flou le plus complet.
Je serai toi je ferai ceci:
* Je parcours ligne par ligne mon fichier
* Je fais un test str.find() avec "cc"
* si le test est concluant, je récupère la ligne dans un string
* je stoppe la lecture du fichier
* je créé un vecteur de int et un int servant de tampon
* je parcours mon string et
* à chaque nouvel espace j'ajoute à mon vecteur le nombre temporaire récupéré
* à chaque caractère chiffre ou '-' je l'ajoute dans mon nombre tampon
Voila, dans une boucle for pour l'analyse ça se fait très bien ;)
Pour le découpage de la ligne en nombre, voila en gros ce que je ferai:
std::vector<int> Get_Numbers_Of_Line(std::string line)
{
std::vector<int> return_value;
int tampon = 0;
int size = (int)line.size();
bool A_Number_Is_Started = false; //booléen pour savoir si on est dans un nombre ou si on est ailleurs dans la chaine
for(int i=0; i<size; ++i)
{
if(line[i] == ' ')
{
if(A_Number_Is_Started)
{
return_value.push_back(tampon);
A_Number_Is_Started = false;
tampon = 0;
}
}
* si c'est un chiffre
A_Number_Is_Started = true;
tampon = tampon*10 + Conversion_Char_To_Int(line[i]);
* si c'est un '-'
A_Number_Is_Started = true;
tampon *= -1;
}
return_value;
}
La variable A_Number_Is_Started est là pour ne pas chercher à mettre un valeur vide au début puisque tu auras un espace avant le premier nombre ("cc xxxx"). Essaye de suivre cet algo à la main tu vas le comprendre! Après n'essaye pas de le compiler je l'ai fait comme ça histoire de te montrer, à toi de le finir ;)
En espérant que tu y vois plus clair !
Ciao
P.S. C'est à toi de faire la fonction Conversion_Char_To_Int, elle n'existe pas c'était pour que ce soit plus clair^^
€dit: J'avais oublié que tes nombres étaient à virgules, tu as juste à changer les types des variables et rajouter un booléen pour savoir comment mettre à jour ton tampon. N'hésite pas à me demander si tu as des problèmes, je creuserai le problème plus en détail
Plus je me relis plus je me trouve chinois...
__________________________
............ Curtis: RTS 3D .............. ......
........... TeamMoteurProg...........
C'est bon, j'ai trouvé mon bonheur. Je te remercie
string line;
double Z[8];
while(getline(fichier_lu,line)){
istringstream ss(line); // on cree un stringstream pour recuperer les valeurs de la ligne
string keyvalue; // la string qui va contenir la clef de la ligne
ss >> keyvalue; // on recupere la clef de la ligne
if(keyvalue==nom_matiere) {// on la compare a la clef a trouver
for (int i=0; i<8; i++)
ss >> Z[i]; //on recupere les 8 valeurs suivantes de la ligne
break; //on sort du while
}
}
Très bien, tu peux mettre le tag "résolu" en haut de cette page si tu veux !
__________________________
............ Curtis: RTS 3D .............. ......
........... TeamMoteurProg...........