Traitement de Fichiers textes en C/C++

devc26 Messages postés 14 Date d'inscription vendredi 20 novembre 2009 Statut Membre Dernière intervention 12 février 2010 - 7 févr. 2010 à 18:28
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011 - 15 févr. 2010 à 13:57
Bonjour,

Je dois réaliser une "moulinette" en C/C++ permettant de modifier l'affichage de résultats en format texte ( contexte: Visual Studio 2003).Ces fichiers se presentent sous la forme suivante:
Continuite_In
-------------
0 2 Continuite_in1 DGIN_31 -0.001mA -344.969mV -442.224mV -199.939mV
Pass
0 3 Continuite_in1 DGIN_30 -0.001mA -694.289mV -438.907mV -199.939mV Pass
0 56 Continuite_in_AN_00 AN_00_V 500.0mV 450.0uA 500.5uA 550.0uA Pass
0 57 Continuite_in_AN_01 AN_01_V 500.0mV 450.0uA 501.4uA 550.0uA Pass
Continuite_Out
--------------
0 76 Continuite_out1 DGO_31 -0.001mA -694.135mV -412.598mV -199.939mV Pass
0 77 Continuite_out1 DGO_30 -0.001mA -765.246mV -410.677mV -199.939mV Pass
Aprés traitement, ce fichier doit avoir la forme suivante:
Continuite_in1 DGIN_31 442.224mV True
Continuite_in1 DGIN_30 -438.907mV True
Continuite_in_AN_00 AN_00_V 500.5uA True

Mon problème réside dans l'utilisation de la bibliothèque "String", notamment des fonctions Get/Getline/replace afin de sélectionner les lignes et les colonnes voulues ( à savoir les colonnes 3/4/7 et 9)et de mofifier les Pass en True et les Fail en False. Voici mon code de lecture/ecriture ( création dans un nouveau fichier)

#include
#include<string>
#include <fstream>
using namespace std;

int main () {

char * buffer;
long size;

ifstream inputfile ("textfile.txt",ifstream::binary);
ofstream outputfile ("new.txt",ofstream::binary);

inputfile.seekg(0,ifstream::end);
size=infile.tellg();
infile.seekg(0);
buffer = new char [size];

inputfile.read (buffer,size);
outputfile.write (buffer,size);

delete[] buffer;
outfile.close();
infile.close();
return 0;

}

Je ne sais pas comment intégrer ces fonctions dans ce contexte (sans doute que mon approche n'est pas bonne).Est-ce que quelqu'un pourrait m'aider?

Merci, par avance.

5 réponses

dragonjoker59 Messages postés 92 Date d'inscription samedi 26 mars 2005 Statut Membre Dernière intervention 23 septembre 2015
12 févr. 2010 à 10:31
pourquoi n'utilises tu pas la fonction getline de inputfile ?
Ensuite tu peux écrire une fonction split qui découpe tes lignes en se servant du caractère ' ' comme séparateur, et enfin tu recrées une ligne qui correspond à celle que tu voudrais à partir des mots récupérés. Ca ne devrait pas être trop dur ^^
0
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
12 févr. 2010 à 15:52
Salut,

Je suis du même avis (boucler sur chaque ligne, l'analyser, et en retourner la ligne à mettre dans le nouveau fichier).
Une précision cependant, dans ton programme tu n'utilises pas String comme tu l'as ennoncé, mais string (STL).


Cordialement, uaip.
0
devc26 Messages postés 14 Date d'inscription vendredi 20 novembre 2009 Statut Membre Dernière intervention 12 février 2010
12 févr. 2010 à 21:55
Salut,

oui tu as raison, en fait je voulais utiliser la librairie string pour le getline ; du coup avec la fonction split je n'aurai pas besoin d'utiliser STL Algo, n'est-ce pas?

Merci,
0
dragonjoker59 Messages postés 92 Date d'inscription samedi 26 mars 2005 Statut Membre Dernière intervention 23 septembre 2015
15 févr. 2010 à 10:07
Je sais pas, peut etre meme que STL Algo a déjà une fonction split de faite, si c'est le cas, utilise celle là ^^
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011
15 févr. 2010 à 13:57
Je crois qu'avec le scanf du C, si tu mets le masque %s, tu ne récupères qu'un mot, ou au pire, une minuscule boucle qui boucle sur la chaine jusqu'aux espaces et place les mots dans un tableau, c'est sans doute plus simple et rapide, non ?


Cordialement, uaip.
0
Rejoignez-nous