totoscill
Messages postés48Date d'inscriptionjeudi 26 avril 2007StatutMembreDernière intervention10 décembre 2009
-
18 juin 2007 à 11:46
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019
-
18 juin 2007 à 23:45
Bonjour,
je veut récupérer des infos dans un fichier. Pour cela il me faut convertir mes lignes récupérer "string" en "char*".
Voici mon code pour cette conversion:
string line;
size_t size = line.size() + 1;
char
*InfoLine=
new
char[size];
File.open(FileName,ios::in);
//ouverture du fichier
if(File){
cout<<
"!!!file open!!!\n\n\n"<<endl;
//instructions
while ( getline( File, line ) ){
strncpy( InfoLine, line.c_str(), size );
cout<Malheureusement, lorsque j'éxécute mon soft, le cout me renvoies n'importe quoi!
Quelqu'un pourrai t il m'aidé?
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 18 juin 2007 à 12:04
Salut,
pourquoi ne pas lire ton fichier d'un bloc ? exemple ICI
sinon si tu veux lire absolument ligne par ligne tu peux faire :
[...]
string file = "fichier.txt";
string data = "";
ifstream mfile(file.c_str());//ouverture du fichier
if (!mfile) data = "erreur";
string lines;
while (getline(mfile, lines))//lecture des lignes du fichier
data += (lines + '\n');
mfile.close();
cout << data << endl;
[...]
------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."
totoscill
Messages postés48Date d'inscriptionjeudi 26 avril 2007StatutMembreDernière intervention10 décembre 2009 18 juin 2007 à 13:21
merci.
Je ne lis pas mon fichier d'un bloc parce que chaque ligne de mon fichier comporte des infos que je dois récupérer. Et le problème est la. Je n'arrive pas a récuperrer ces infos. Pour cela, il faut que je convertisse ma string en char. Sur chaque ligne, j'ai deux infos a récupérer qui ne sont pas l'une après l'autres.
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 18 juin 2007 à 13:44
Salut,
ce qui m'intrigue dans ton code c'est que tu alloue un tableau de 1 octect... :
string line; //chaîne videsize_t size line.size()+1;//du vide + 1 1 octect ^^
char* InfoLine = new char[size];//tableau de 1
.... donc la suite je ne suis pas surpris que tu n'ai pas ce que tu veux....
pour la petite adaptation tu peux faire (c'est un chouilla crado mais tu devrais y trouver ton compte):
#include <fstream>
#include
using namespace std;
int main(int argc, char **argv) {
ifstream mfile("fichier.txt");//ouverture du fichier
if (mfile) {
string lines;
long num = 0;
while (getline(mfile, lines)) {//lecture des lignes du fichier
const char* infoLine= lines.c_str(); //recup la ligne
//affichage
cout << "infoLine (num : " << (++num) << ") = " << infoLine << endl;
}
mfile.close();
} else
cerr << "Open error !" << endl;
return 0;
}
------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 18 juin 2007 à 23:45
"Je ne lis pas mon fichier d'un bloc parce que chaque ligne ..."
Suffit de 2 pointeurs à ballader dans le buffer pour détailler les lignes.
La lecture 'par ligne' n'existe pas, c'est les libs de surcouche fstream et iostream qui contiennent la masse de code nécessaire à simuler cela (ce code lent et inutile finira dans ton exe). Tout ceci cumulé à l'emploi de 'string' rendra ton code aussi "performant" que du VB.