Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1220 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C++] Recuperer des valeurs depuis un fichier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] Recuperer des valeurs depuis un fichier

n°66889
godbout
Génial.
Posté le 22-10-2001 à 16:16:10  profilanswer
 

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 ;)

mood
Publicité
Posté le 22-10-2001 à 16:16:10  profilanswer
 

n°66891
Carbon_14
Posté le 22-10-2001 à 16:24:23  profilanswer
 

C'est linéaire ? (je veux dire une seule ligne avec des valeurs numériques et des ;)  Pas de fin de ligne retour chariot ?

n°66892
godbout
Génial.
Posté le 22-10-2001 à 16:33:17  profilanswer
 

ben je recupere la ligne avec un fgets.
Apres dans cette ligne j'ai les donnees avec des ;

n°66933
Roswell_
Posté le 22-10-2001 à 18:00:14  profilanswer
 

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.

n°66949
Alload
Posté le 22-10-2001 à 19:10:32  profilanswer
 

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.

n°66966
godbout
Génial.
Posté le 22-10-2001 à 20:51:48  profilanswer
 

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 !!!!)


---------------
Super.
n°66973
Alload
Posté le 22-10-2001 à 21:20:00  profilanswer
 

Et si tu utilisais un string?

n°66976
manu025
Posté le 22-10-2001 à 21:30:43  profilanswer
 

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 ?


---------------
-@- When code matters more than commercials -@-
n°66983
godbout
Génial.
Posté le 22-10-2001 à 22:01:49  profilanswer
 

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...


---------------
Super.
n°66992
jolly
Posté le 22-10-2001 à 22:18:08  profilanswer
 

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 !!

mood
Publicité
Posté le 22-10-2001 à 22:18:08  profilanswer
 

n°67006
wpk
Posté le 22-10-2001 à 23:10:25  profilanswer
 

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  :D

n°67019
tfj57
Posté le 23-10-2001 à 02:39:14  profilanswer
 

wpk a écrit a écrit :

 
    ...
    while (cour)
    ...




 
Je crois qu'il faut mettre  ... while (*cour) ...
 
A+

 

[edtdd]--Message édité par tfj57--[/edtdd]

n°67032
__Lolo__
C&#039;est pouleversant !
Posté le 23-10-2001 à 09:01:39  profilanswer
 

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  :D  




une despé et il est paf :D :D

n°67035
godbout
Génial.
Posté le 23-10-2001 à 09:10:57  profilanswer
 

j'suis sur le cul...
 
faudra que je me remette a niveau :(

n°67041
cram
Posté le 23-10-2001 à 09:39:08  profilanswer
 

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

n°67059
godbout
Génial.
Posté le 23-10-2001 à 10:05:42  profilanswer
 

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.

n°67068
LetoII
Le dormeur doit se réveiller
Posté le 23-10-2001 à 10:42:29  profilanswer
 

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)

n°67083
godbout
Génial.
Posté le 23-10-2001 à 11:14:35  profilanswer
 

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 ;)

n°67122
Carbon_14
Posté le 23-10-2001 à 14:27:32  profilanswer
 

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

n°67140
__Lolo__
C&#039;est pouleversant !
Posté le 23-10-2001 à 14:54:08  profilanswer
 

une classe stringtokenizer que j'avais ecrite vite fait puis laisser tomber...
le .h :

Code :
  1. #ifndef _stringtokenizer_h
  2. #define _stringtokenizer_h
  3. //----Include manip fichiers------------------------------------
  4. #pragma warning (disable : 4786)
  5. #include <string>   // std::string
  6. #include <vector>   // std::vector
  7. //----Classe StringTokenizer------------------------------------
  8. class StringTokenizer
  9. {
  10. public:
  11. StringTokenizer (std::string str);
  12. StringTokenizer (std::string str,std::string delim);
  13.    
  14. virtual ~StringTokenizer ();
  15. int countTokens ();
  16. bool hasMoreTokens ();
  17. std::string nextToken ();
  18. private:
  19. std::string _string;
  20. std::string _delim;
  21. std::vector<std::string> _tokens;
  22. int _it;
  23. void tokenize (std::string str, std::string delim);
  24. };
  25. #endif


 
le .cpp:

Code :
  1. #include "StringTokenizer.h"
  2. //----StringTokenizer (str)--------------------------------------
  3. StringTokenizer::StringTokenizer (std::string str)
  4. {
  5. tokenize (str, " " );
  6. }
  7. //----StringTokenizer (str, delim)-------------------------------
  8. StringTokenizer::StringTokenizer (std::string str, std::string delim)
  9. {
  10. tokenize (str, delim);
  11. }
  12. //----StringTokenizer::tokenize (str, delim)---------------------
  13. void StringTokenizer::tokenize (std::string str, std::string delim)
  14. {
  15. int delimPos = 0;
  16. _string = str;
  17. _delim  = delim;
  18. while ((delimPos = _string.find (_delim)) != _string.npos)
  19. {
  20.  std::string newToken = _string.substr (0, delimPos);
  21.  _tokens.push_back (newToken);
  22.  _string = _string.substr (delimPos + _delim.size (), _string.size ());
  23. }
  24. _tokens.push_back (_string);
  25. _string = str;
  26. }
  27. //----StringTokenizer::~StringTokenizer-----------
  28. ---------------
  29. StringTokenizer::~StringTokenizer ()
  30. {
  31. _tokens.clear ();
  32. }
  33. //----StringTokenizer::countTokens-------------------------------
  34. int StringTokenizer::countTokens ()
  35. {
  36. return _tokens.size();
  37. }
  38. //----StringTokenizer::hasMoreTokens-----------------------------
  39. bool StringTokenizer::hasMoreTokens ()
  40. {
  41. if (_it < _tokens.size ())
  42. {
  43.  return true;
  44. }
  45. return false;
  46. }
  47. //----StringTokenizer::nextToken---------------------------------
  48. std::string StringTokenizer::nextToken ()
  49. {
  50. if (hasMoreTokens ())
  51. {
  52.  return _tokens[_it++];
  53. }
  54. return 0;
  55. }


 
a modifier et ameliorer... :D

n°67148
godbout
Génial.
Posté le 23-10-2001 à 15:07:27  profilanswer
 

very trop compliqued for me :D

n°67313
wpk
Posté le 24-10-2001 à 01:42:44  profilanswer
 

__Lolo__ a écrit a écrit :

 
une despé et il est paf :D :D  




 
pfff  :non: , 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  :sol:

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C++] Recuperer des valeurs depuis un fichier

 

Sujets relatifs
lien permanent entre un fichier excel et base access ?[PHP] date d'un fichier
[PHP] récuperer le rep courant...[QT] fichier de type ini
[C ou C++] tronquer un fichier par le début[VB4] Copier un fichier sélectionné dans une file list box vers a:
[C++, MFC éventuellement] Imprimer à partir d'un fichier[C++] Ecriture et lecture de bits dans un fichier
stocker les valeurs d'un formulaire dans un tableau[VC++]renomer un fichier
Plus de sujets relatifs à : [C++] Recuperer des valeurs depuis un fichier


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR