Recuperer des valeurs depuis un fichier [C++] - C++ - Programmation
Marsh Posté le 22-10-2001 à 16:24:23
C'est linéaire ? (je veux dire une seule ligne avec des valeurs numériques et des Pas de fin de ligne retour chariot ?
Marsh Posté le 22-10-2001 à 16:33:17
ben je recupere la ligne avec un fgets.
Apres dans cette ligne j'ai les donnees avec des ;
Marsh Posté le 22-10-2001 à 18:00:14
tu pourrais faire une boucle avec un sscanf(string, "%s;",buffer); puis tu reformat la string d'entrer pour virer ce que tu viens de récupérer jusqu'a ce qu'elle soit vide.
Enfin la c'est du C.
Marsh Posté le 22-10-2001 à 19:10:32
ifstream file("cequetuveux.extension" );
while (!file.eof())
{
char buffer[300];
file >> buffer;
switch (buffer)
{
case ";":
fais rien;
break;
default:
mettre la valeur dans le tableau;
break;
}
}
Voilà, j'ai pas testé mais je ferais un truc comme ça.
Marsh Posté le 22-10-2001 à 20:51:48
Impossible de faire un switch sur un char[300].
Putain ca commence a me faire chier ce putain de bordel, ca fait 2 jours que je suis dessus !!
Et pas moyen de faire un putain de strcmp(buffer[i], ";" ), il veut une adresse, mais l'adresse j'en ai rien a foutre !!!!
c'est vraiment de la merde ces fonctions (et je suis vraiment une bouse aussi !!!!)
Marsh Posté le 22-10-2001 à 21:30:43
Godbout a écrit a écrit : Impossible de faire un switch sur un char[300]. Putain ca commence a me faire chier ce putain de bordel, ca fait 2 jours que je suis dessus !! Et pas moyen de faire un putain de strcmp(buffer[i], ";" ), il veut une adresse, mais l'adresse j'en ai rien a foutre !!!! c'est vraiment de la merde ces fonctions (et je suis vraiment une bouse aussi !!!!) |
Ben si il veut une adresse, met ton ';' dans une variable char et prend l'adresse de cette var dans ta fonction. Sinon fait une boucle en lisant caractère par caractère et stocke les dans une liste chainée tant que tu ne tombe pas sur un ';'. Et lorsque tu tombe sur un ';' tu termine la liste chainée par un '\0' et tu récupère ta chaine, et tu recommence ainsi de suite jusqu'à EOF.
C'est assez clair ?
Marsh Posté le 22-10-2001 à 22:01:49
c'est pas le ";" qui gene, c'est buffer[i], il en veut pas, il veut &(buffer[i]), ce qui me sert strictement a rien du tout !!!
J'en ai ras le bol pour ce soir, je sens que je vais peter un cable.
Pour les listes chainees je vais voir ca demain, mais je sens que je vais encore m'arracher les cheveux.
Tout ca a finir pour vendredi, j'ai plus qu'a me tirer une balle !!
Putain faut que j'eclate quelque chose bordel !!!!!!
Le chat, il est ou...
Marsh Posté le 22-10-2001 à 22:18:08
Alload a écrit a écrit : ifstream file("cequetuveux.extension" ); while (!file.eof()) { char buffer[300]; file >> buffer; switch (buffer) { case ";": fais rien; break; default: mettre la valeur dans le tableau; break; } } Voilà, j'ai pas testé mais je ferais un truc comme ça. |
regarde e C ya une fction qui fait ca et te le met dans un tablo !!
Marsh Posté le 22-10-2001 à 23:10:25
c'est simplissime en c pur :
{
char tab[200][100];
FILE * hnd = fopen("fic.txt","rt" );
int i = 0;
do
{
char buffer[300];
if(fgets(buffer,299,hnd))
{
char * cour = buffer;
char * prec = buffer;
while (cour)
{
cour = strchr(prec, ';';
if(cour)
{
*cour = 0;
cour++;
}
strcpy(&tab[i], prec);
i++;
prec = cour;
}
}
while (!feof(hnd) && i<200 );
fclose(hnd);
}
bon, j'ai pas testé et pas deboggue (la biere doit pas aider des masses non plus) mais l'idee doit plus ou moins y etre
Marsh Posté le 23-10-2001 à 02:39:14
wpk a écrit a écrit : ... while (cour) ... |
Je crois qu'il faut mettre ... while (*cour) ...
A+
[edtdd]--Message édité par tfj57--[/edtdd]
Marsh Posté le 23-10-2001 à 09:01:39
wpk a écrit a écrit : bon, j'ai pas testé et pas deboggue (la biere doit pas aider des masses non plus) mais l'idee doit plus ou moins y etre |
une despé et il est paf
Marsh Posté le 23-10-2001 à 09:39:08
perso je dirais qu'il faut utiliser strtok, qui decoupe une chaine de caractères en plusieurs séparé par une valeur (par exemple ; dans ton cas)
voila voila
Marsh Posté le 23-10-2001 à 10:05:42
ok
l'histoire des pointeurs est vraiment pas mal, surtout qu'il faut que je m'y remette grave, parce que c'etait pas si complique que ca.
Mais avec les pointeurs j'ai trop de mal, surtout pour les chaines de caracteres.
Marsh Posté le 23-10-2001 à 10:42:29
Heu tu peux aussi utiliser la fonction strtok de la bibliothéque C string.h qui doit de te permettre simplement de récupérer tes données (si c du numéric combine avec atoi ou atof de stdlib.h)
Marsh Posté le 23-10-2001 à 11:14:35
pour les donnees en fait c'est bon (apparemment).
J'ai fait des strncat et strncopy, comme ca je donne l'adresse mais je recupere que la premiere valeur et pas tout le bordel qu'il y a derriere.
Merci
Marsh Posté le 23-10-2001 à 14:27:32
Un bout de code qui "émule" strtok (testé)
char *Chaine;
char *ptr;
int iC, ind, NbCar, Tabl[250];
int ValNum (ou float);
// lecture de la chaine à partir du fichier
//......
// décodage
ptr = Chaine;
ind = 0;
NbCar = strlen(Chaine); //<= en dehors de la boucle ! Sinon strlen() varie !!
for (iC = 0; iC < NbCar; ++ iC)
{
if (Chaine[iC] == ';'
{
// met caract à zéro pour lire direct
Chaine[iC] = '\0';
ValNum = atoi(ptr); // ou atoi(ptr);
Tabl[ind] = ValNum;
++ ind;
// nouveau début de chaîne "nombre"
ptr = (Chaine + iC + 1);
}
}
// voir le traitement de la fin si y a pas de ';' au bout
Marsh Posté le 23-10-2001 à 14:54:08
une classe stringtokenizer que j'avais ecrite vite fait puis laisser tomber...
le .h :
Code :
|
le .cpp:
Code :
|
a modifier et ameliorer...
Marsh Posté le 24-10-2001 à 01:42:44
__Lolo__ a écrit a écrit : une despé et il est paf |
pfff , j'avais la creve, et la despe c'etait juste au resto, j'en ai ingurgité une autre chez moi... et j'etais pas fait, la preuve, le code marchouille apparament
Marsh Posté le 22-10-2001 à 16:16:10
Alors voila le petit pb.
J'ai un fichier avec des valeurs separees par un ; et je voudrais recuperer ces valeurs dans un tableau.
Y a t il une fonction qui permette de faire ca ?
Merci