Lire/Ecrire dans un fichier txt, pb, besoin d'aide
eupeup
Messages postés57Date d'inscriptionmardi 11 mars 2003StatutMembreDernière intervention24 avril 2013
-
9 août 2005 à 17:30
eupeup
Messages postés57Date d'inscriptionmardi 11 mars 2003StatutMembreDernière intervention24 avril 2013
-
10 août 2005 à 12:00
Salut a tous, j'ai un probleme avec une appli que je dois coder.
Je suis un matheux et non un codeur, vous m'excuserez.
J'ai un fichier xml, et je dois extraire les donnees comprises entre certaines balises, puis les importer dans un fichier txt tout simple.
En gros les donnees que je dois extraire sont toujours des nombres (positifs et negatifs) et je dois les importer les un a la suite des autres dans le fichier txt de reception.
Comme je suis pas totalement nul, j'ai deja bien avance.
J'ai utilise un tableau a 2 dimensions, une case pour chaque caractere, dans lequel tous les caracteres du fichier xml sont places(lignes par lignes et caract par caract).
Chaque lignes de mon tab correspond a une ligne du fichier.
J'ai ensuite utilise un second tableau dans lequel j'ai extrait du premier les donnees dont j'ai besoin ( je rappelle que ce sont les caracteres compris entre certains types de balises)
Ainsi j'ai un tableau a 2 dim qui contient exactement les elements que je dois afficher dans mon fic txt.
Mon probleme c'est que mon tableau est de la forme:
char destination[1000][1000];
Et que pour ecrire dans un fichier j'utilise : fprintf qui prend en argument un char*
Alors vous me diriez : utilise un tableau char* pour stocker les donnees
mais je suis oblige d'utiliser un char car j'utilise fgetc() pour recuperer les donnees du fichier initial.
J'ai egalement essaye de caster comme suit:
(char*)destination[i][j]
Ou d'utiliser itoa (car fgetc() retourne un int)
Rien ne marche, toujours la meme erreur ("memory couldn't be read....de mescouiles")
Je suis degoute, car je suis une quiche, mais j'ai qd meme bien avance, je sais exactement ce que je dois faire pour terminer (une double boucle for pour parcourir mon tableau et en afficher le contenu) mais je suis bloque a cause d'une erreur de compatibilite....
Si quelqu'un peut me debloquer, ca serait genial, j'imagine qu'il y a une solution toute simple, que je suis pas le seul a qui s'est arrive...
Merci d'avance
A voir également:
Lire/Ecrire dans un fichier txt, pb, besoin d'aide
MNEMONIC
Messages postés59Date d'inscriptiondimanche 19 décembre 2004StatutMembreDernière intervention 1 septembre 2006 9 août 2005 à 18:23
...
Pour répondre à la question :
1ère ligne de tont tableau -> destination
2ème ligne -> destination +1000
etc...
La première adresse de ton tableau correspond à destination[0][0].
Donc l'endroit où tu dois récupérer tes données doit correspondre en gros à
fprintf(fichier,"%s",(char *)destination+(1000*numeroligne)).
Si tu n'as pas mis un '\0' après le dernier caractère, y'a des chances pour qu'il aille lire en dehors du tableau...
Quand tu fais un char*destination[i][j], c'est un magnifique tableau de pointeurs...mais il n'a pas de mémoire allouée, du coup, quand tu essayes de lire, il se gauffre.
En dehors de la question : J'ai l'impression que tu te compliques la vie pour pas grand chose...
Si j'ai bien compris, ton fichier doit avoir en gros la tête suivante :
blabla
12345 blabla
donc, dans ta boucle de lecture :
tu récupères la ligne
tu recherches s'il y a une balise de ta liste
s'il y en a une, tu recherches la position de la balise fermante
tu copies ou tu concatènes dans un buffer ce qui se trouve entre la position du dernier caractère de ta balise ouvrante et la première position de ta balise fermante
A la fin de ta boucle de lecture, tu écris la totalité d'un bloc...
Du coup, tu économises des boucles...
eupeup
Messages postés57Date d'inscriptionmardi 11 mars 2003StatutMembreDernière intervention24 avril 2013 10 août 2005 à 00:24
Merci d'avoir repondu aussi vite.
EN fait je dois traiter plusieurs fic xml, pour l'instant j'essaye avec un, mais c'est pareil si yen a plusieurs, ils se presentent de la maniere suivante:
Donc voila j'ai plusieurs fichier de ce type a traiter et je dois extraire uniquement les données comprises entre les balises <Values>
Toutes ces valeurs sont mises les unes à la suite des autres
eupeup
Messages postés57Date d'inscriptionmardi 11 mars 2003StatutMembreDernière intervention24 avril 2013 10 août 2005 à 10:47
Merci Mnemo, en fait ca fonctionne, l'erreur a ete trouve rapidement avec un ptit coup de debugger.
En fait dans mon fichier xml il y a des tabulations, et notemment il y en a une devant chaque balise Values, ce qui fait que lorsqu'il check la ligne et bien elle rentre pas dans la condition car en realite il faut
if(!strncmp(ligne,"\t<Values>",9))
a la place de if(!strncmp(ligne,"<Values>",8))
Il y a encore des ptits details, il affiche egalement "<", enfin bon la c'est cool, dans 5min c fini.
Serieux merci, de mon cote j'avais bien avance et je m'etais bien debloque ce matin, je pense que j'aurais un truc propre avec un peu de taf, mais ton code est bcp plus simple que le mien.
xterminhate
Messages postés371Date d'inscriptiondimanche 4 janvier 2004StatutMembreDernière intervention23 septembre 2009 10 août 2005 à 11:58
Si tu as un probleme avec la compilation de MinXL, bascule sur les message du source MinXL.... je t'aiderai à configurer (cette daube de) VC6 pour compiler du C++ standard.