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

  FORUM HardWare.fr
  Programmation
  C++

  traitement dans un fichier texte

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

traitement dans un fichier texte

n°1545982
Zap0
Posté le 20-04-2007 à 19:34:58  profilanswer
 

Bonjour,
 
J'utilise un logiciel qui me donne des informations dans un fichier de type texte sous la forme : info1,info2,info3
Les virgules servent de séparateur
Je voudrais récupérer info2 et info3 qui sont des valeurs, les transformer en valeurs numériques puis les mettre en 2 colonnes dans ce fichier (ou dans un nouveau en .txt)
 
info2 et info3 sont des valeurs décimales avec un "." il faudrait aussi que ce "." soit tranformé en ","
 
Est-ce que vous pouvez m'aider ??
 
Merci d'avance

mood
Publicité
Posté le 20-04-2007 à 19:34:58  profilanswer
 

n°1545984
Joel F
Real men use unique_ptr
Posté le 20-04-2007 à 19:37:08  profilanswer
 

ouvre ton fichier avec un std::iostream, lis chaque ligne en boucle, ensuite utilise boost::tokenizer pr découper ta ligne en token séparé par des virgules et stocke les dnas un std::vector :)

n°1545985
Zap0
Posté le 20-04-2007 à 19:38:29  profilanswer
 

heu est-ce que tu peux m'expliquer avec un peu plus de détails car je suis pas un pro en langage C

n°1545989
Joel F
Real men use unique_ptr
Posté le 20-04-2007 à 19:41:28  profilanswer
 
n°1545991
Zap0
Posté le 20-04-2007 à 19:42:36  profilanswer
 

euh C++ pardon

n°1545992
Zap0
Posté le 20-04-2007 à 19:43:48  profilanswer
 

comment tu fais pour lire chauqe ligne tu utilises scanf ?

n°1545997
Joel F
Real men use unique_ptr
Posté le 20-04-2007 à 19:53:23  profilanswer
 

getline ;)

 

Pour la lecture de ficheir texte, fais une recherche, Taz a débattu de ca 100000 fois deja :)


Message édité par Joel F le 20-04-2007 à 19:53:34
n°1546016
Zap0
Posté le 20-04-2007 à 20:37:34  profilanswer
 

En fait quelqu'un pourrait m'aider à démarrer car là je vois pas du tout comment faire : mes capacités en c++ sont très limités...

n°1546581
Zap0
Posté le 22-04-2007 à 15:13:01  profilanswer
 

J'ai commené ça avec une petite aide sur le net :
#include <stdio.h>
 
/* retourne le nombre de lignes d'un fichier texte deja ouvert */
int get_nb_lines(FILE* fp)
{
  unsigned int nb = 0;
   
  while (fgets(fp) != NULL) {
    nb++;
  }
 
  return nb;
}
 
/* recupere les valeurs dans v1 et v2 (passage par reference) */
void get_values(char* ligne, float *v1, float *v2)
{
   char* tmp:
   char* result;
    /* strtok modifie son premier argument,  
        on travaille donc sur une variable temporaire */
   strcpy(tmp, ligne);
 
   result = strtok(tmp, "\t, " );
   if(result != NULL) {
     sscanf(result, "%f", v1);
     
     result = strtok(NULL, "\t " );
     if(result != NULL) {
        sscanf(result, "%f", v2);
     }
   }  
}
 
 
int main(int argc, char* argv[])
{
  FILE* fp = NULL;
  unsigned int nb_lines = 0;
  float *value1 = NULL,
          *value2 = NULL;
  int i = 0;
  char line[256] = "";
   
   
  fp = fopen("test.dat", "r" );
  if (fp == NULL) return -1;
 
  nb_lines = get_nb_lines(fp);
 
  value1 = malloc(nb_lines * sizeof *value1);
  value2 = malloc(nb_lines * sizeof *value2);
 
  while((fgets(ligne, 256, fp) != NULL)  
          && (i<nb_lines)) {
    get_values(ligne, &(value1[i]), &(value2[i]));
    i++;
  }  
 
  /* et bien sur on libere la memoire */
  free(value1);
  value1 = NULL;
  free(value2);
  value2 = NULL;
  fclose(fp);
  fp = NULL;
 
  return  0;
}
 
 
 
 
Qu'est-ce que vous en pensez ?

n°1546583
KangOl
Profil : pointeur
Posté le 22-04-2007 à 15:15:37  profilanswer
 

c'est du C ça, pas du C++

mood
Publicité
Posté le 22-04-2007 à 15:15:37  profilanswer
 

n°1548017
Zap0
Posté le 24-04-2007 à 13:34:29  profilanswer
 

J'ai retenu que pour découper une chaîne en fonction d'un séparateur (dans mon cas une virgule), je peux procéder de la manière suivante :
 
#include <sstream>
#include <string>
#include <iostream>
 
using namespace std;
 
int main()
 
{
istringstream iss("mot1,mot2" );
string mot;
while(std::getline(iss,mot,','))
                      {
                       cout<<mot<<'\n'
                      }
}
 
 
Néanmoins cela m'oblige à écrire la ligne que je veux séparer.
Dans mon cas j'ai plus d'une centaine de lignes de la forme mot1,mot2,mot3
Après j'aimerais mettre ces données en 3 colonnes : mot1 mot2 et mot3
 
Je n'arrive pas à comprendre comment il faut faire avec tokenizer...


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

  traitement dans un fichier texte

 

Sujets relatifs
[Bash] choisir une ligne d'un fichier avec une boucle select[débutant] retrouver la ligne courante du fichier
Remplacer du texte dans HTMLrechercher un ou plusieurs mot present dans un texte
[c] Récupération de fichier partagé sur un réseauProposer un fichier au téléchargement
traitement d'un fichier texteTraitement élaboré d'un fichier texte
[PHP] traitement fichier texte II, le retour[PHP] traitement d'un fichier texte a tabulation
Plus de sujets relatifs à : traitement dans un fichier texte


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