problème pour ecriture de résultat dans un fichier text

problème pour ecriture de résultat dans un fichier text - C - Programmation

Marsh Posté le 21-03-2005 à 13:35:46    

bonjour a tous, j'ai un petit problème pour écrire un résultat dans un fichier text, doit-je le convertir en chiane de caratere, ou puis-je le mettre en float?
j'ai ecrit ce code, mais ca beug a la ligne du fprintf, si qq1 aurais une solution pr moi, ce serai super cool
 
 

Code :
  1. int main (void){
  2. FILE *test;
  3. if ((test=fopen("ecriture test.txt","r+t" ))==NULL)
  4. {perror ("fopen" );
  5. exit(1);}
  6. else {
  7. float a,b;
  8. fseek(test,14L,SEEK_SET);
  9. fscanf(test,"%f",&a);
  10. b=12.5*540/a;
  11. fseek(test,58L,SEEK_SET);
  12. fprintf(test,"%f",b);
  13. fclose(test);
  14. return 0;
  15. }}


 
merci d'avance, bonne journée

Reply

Marsh Posté le 21-03-2005 à 13:35:46   

Reply

Marsh Posté le 21-03-2005 à 14:01:23    

baleine2 a écrit :

bonjour a tous, j'ai un petit problème pour écrire un résultat dans un fichier text, doit-je le convertir en chaine de caratere, ou puis-je le mettre en float?
j'ai ecrit ce code, mais ca beug a la ligne du fprintf, si qq1 aurais une solution pr moi, ce serai super cool


Ca veut dire quoi 'ca beug' ? Il se passe quoi au juste ?
 
Et si tu postais du code compilable ?


main.c: In function `main':
main.c:2: error: `FILE' undeclared (first use in this function)
main.c:2: error: (Each undeclared identifier is reported only once
main.c:2: error: for each function it appears in.)
main.c:2: error: `test' undeclared (first use in this function)
main.c:3: warning: implicit declaration of function `fopen'
main.c:3: error: `NULL' undeclared (first use in this function)
main.c:4: warning: implicit declaration of function `perror'
main.c:5: warning: implicit declaration of function `exit'
main.c:8: warning: implicit declaration of function `fseek'
main.c:8: error: `SEEK_SET' undeclared (first use in this function)
main.c:9: warning: implicit declaration of function `fscanf'
main.c:12: warning: implicit declaration of function `fprintf'
main.c:13: warning: implicit declaration of function `fclose'



---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 21-03-2005 à 14:09:17    

ca compile sans erreur, mais qd j'execute, ca me mets ce message:
"Thread  stopped D:\Doccuments and settings\...\test.exe: Fault: floating point overflow at 0x401166"
???

Reply

Marsh Posté le 21-03-2005 à 14:19:44    

baleine2 a écrit :

ca compile sans erreur,


Certainement pas. Il manque <stdio.h>

Citation :


mais qd j'execute, ca me mets ce message:
"Thread  stopped D:\Doccuments and settings\...\test.exe: Fault: floating point overflow at 0x401166"
???

Que contient le fichier "ecriture test.txt" ? Et que représentent ces déplacements absolus avec fseek()? Cette fonction ne marche correctement qu'(avec les fichiers binaires ouverts en mode "b".
 
Au fait, le mode "r+t" n'existe pas. C'est "r+".
 
Si j'ai bien compris, tu veux lire une valeur dans le fichier, et l'écrire ailleurs dans le même fichier ? Cet ailleurs est-il bien dans le fichier ?
 
Ecrire et lire en même temps dans le même fichier est souvent la meilleure façon de détruire le fichier. Une façon sûre (et réversible) est d'utiliser 2 fichiers et les fonctions rename() et remove() astucieusement.
 
Explique exactement ce que tu veux faire.
 
J'ai ajouté du code de diagnostic. Chez moi, j'ai une erreur de lecture, c'est normal, dans le fichier de test, il y a n'importe quoi...


#include <stdio.h>
#include <stdlib.h>
 
static void onexit (void)
{
   system ("pause" );
}
 
int main (void)
{
   atexit (onexit);
 
   {
      static char const fname[] = "../data/test.txt";
      FILE *fp = fopen (fname, "r+" );
 
      if (fp != NULL)
      {
         float a, b;
         int err;
 
         err = fseek (fp, 14L, SEEK_SET);
 
         if (!err)
         {
            int n = fscanf (fp, "%f", &a);
 
            if (n == 1)
            {
               b = 12.5 * 540 / a;
               printf ("a=%f b=%f\n", a, b);
 
               fseek (fp, 58L, SEEK_SET);
 
               if (!err)
               {
                  fprintf (fp, "%f", b);
               }
               else
               {
                  perror (fname);
               }
            }
            else
            {
               fprintf (stderr, "lecture : erreur de format\n" );;
            }
         }
         else
         {
            perror (fname);
         }
         fclose (fp);
      }
      else
      {
         perror (fname);
         exit (EXIT_FAILURE);
      }
   }
   return 0;
}


Message édité par Emmanuel Delahaye le 21-03-2005 à 14:38:18

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 21-03-2005 à 14:27:58    

en fait, je veux, a partir d'un fichier excel, enregistré en format text, récupérer une valeur, la mettre ds une variable pr l'utiliser dans différents calculs, et les résultats de ces calculs, les mettre a des endroit précis du fichier text.
en gros, j'ai un tableau ou je rentre une valeur, et de cette valeur j'obtiens des résultats exploitables. je sais que l'on peut le faire directement sur excel, mais je voulais le faire en prog pr m'entrainer (car comme tu as pu le remarquer, je suis débutante!)

Reply

Marsh Posté le 21-03-2005 à 14:34:17    

c'est pas le bon plan d'utiliser fprintf, fscanf...
 
utilise fread, fwrite, fseek... ça marche bcp mieux et tu peux mettre ce que tu veux dedans...


Message édité par moi23372 le 21-03-2005 à 14:34:54
Reply

Marsh Posté le 21-03-2005 à 14:40:01    

baleine2 a écrit :

en fait, je veux, a partir d'un fichier excel, enregistré en format text,


Peux tu donner un exemple de ce fichier texte ? (Dans des balises 'fixe')
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 21-03-2005 à 14:41:07    

moi23372 a écrit :

c'est pas le bon plan d'utiliser fprintf, fscanf...
 
utilise fread, fwrite, fseek... ça marche bcp mieux et tu peux mettre ce que tu veux dedans...


C'est pas 'mieux' ou 'moins bien'. Ca dépend de la structure du fichier. (Texte, binaire...)


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 21-03-2005 à 14:50:57    

voici mon fichier text:


Cellule (m): 0,125
 
         gamme
a            540
b         380
 
c        5000
d        6000


 

Reply

Marsh Posté le 21-03-2005 à 15:22:52    

baleine2 a écrit :

voici mon fichier text:


Cellule (m): 0,125
 
         gamme
a            540
b         380
 
c        5000
d        6000




Ce que tu veux faire me parait difficile avec un fichier texte, tout simplement parce qu'un fichier texte a rarement un format fixe, ne serait-ce que parceque selon les machines, une fin de ligne occupe un ou deux caractères, sans parler du nombre d'espaces qui peux changer etc.  
 
Ce que tu veux faire, (remplacer une séquence de bytes par une autre) peux se faire facilement dans un fichier binaire dont le format est parfaitement défini en bytes, mais plutôt aléatoire sur un fichier texte. Avec ce fichier texte, ton code donne


a=0.000000 b=1.#INF00
Appuyez sur une touche pour continuer . . .


En admettant que "0,125" ai été trouvé au bon endroit, la conversion s'arrête à la ',' (virgule) car fscanf() "%f" attend un '.' (point). a vaut donc 0 et la division par a (qui vaut 0) invoque un comportement indéfini...
 
Tu vois que ce n'est pas évident...
 
Tu aurais de meilleures chances avec un format 'CSV' (Séparé par des virgules)
 
Essaye d'exporter ton fichier Excel en CSV...
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 21-03-2005 à 15:22:52   

Reply

Marsh Posté le 21-03-2005 à 16:37:26    

oulala... t'aurais de la doc sur ce format, et comment faut implémenter ca... je pensais pas que ce que je voulais faire était si compliqué! ;-)

Reply

Marsh Posté le 21-03-2005 à 16:50:22    

baleine2 a écrit :

oulala... t'aurais de la doc sur ce format, et comment faut implémenter ca... je pensais pas que ce que je voulais faire était si compliqué! ;-)


Une bonne ressource pour les formats de fichiers:
 
http://www.wotsit.org/


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 22-03-2005 à 11:55:27    

merci, mais je n'arrive pas a trouver ce dt j'ai besoin sur ce site, comment doit-je implémenter un fichier CSV? comment le traiter?

Reply

Marsh Posté le 22-03-2005 à 13:12:54    

baleine2 a écrit :

merci, mais je n'arrive pas a trouver ce dt j'ai besoin sur ce site, comment doit-je implémenter un fichier CSV? comment le traiter?


Je pense qu'Excel sait exporter au format CSV. La description doit être détaillée dans le manuel de Excel.
 
En gros :  
 
"donnee cellule A1",,"donnee cellule A3"
"donnee cellule B1","donnee cellule B2"
 
un truc comme ça...


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 23-03-2005 à 09:23:57    

ok, mais mes données, ce sont quoi des caractere ou des nombres? car moi j'aurais des 2; et sur les nombre je dois faire des calculs puis inscrire les resultats dans le fichier. je nage vraiment, la. je comprend pas grand chose...

Reply

Marsh Posté le 23-03-2005 à 09:36:33    

baleine2 a écrit :

ok, mais mes données, ce sont quoi des caractere ou des nombres? car moi j'aurais des 2; et sur les nombre je dois faire des calculs puis inscrire les resultats dans le fichier. je nage vraiment, la. je comprend pas grand chose...


Comme je l'ai déjà dit, le détail du format est dans la doc d'Excel. (Je ne connais pas Excel).
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 23-03-2005 à 09:50:35    

ok, merci qd meme...excel est bcp plus compliqué que je croyé...

Reply

Marsh Posté le 23-03-2005 à 11:39:06    

lol ?
je ne vois pas la difficulté de cliquer sur exporter -> format cvs...

Reply

Marsh Posté le 23-03-2005 à 12:19:14    

ben excuse moi, mais dans l'aide d'excel, je n'ai pas trouvé le format CSV, j'ai le format XML, png, VML...
apparement, XML serait une amelioration de CSV mais il faut le coder en UTF-8???

Reply

Marsh Posté le 23-03-2005 à 13:06:01    

baleine2 a écrit :

ben excuse moi, mais dans l'aide d'excel, je n'ai pas trouvé le format CSV, j'ai le format XML, png, VML...
apparement, XML serait une amelioration de CSV mais il faut le coder en UTF-8???


 
http://www.google.fr
 
Résultats 1 - 10 sur un total d'environ 432 000 pour excel CSV format. (0,20 secondes)


Message édité par Emmanuel Delahaye le 23-03-2005 à 13:06:41

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 23-03-2005 à 14:06:48    

vindiou oé c'est pas gagné :)
exporte au format CSV et tu comprendra ce que tu devra faire.
Et si tu comprends toujours pas ce que tu dois faire aprés, ba reprends les bases (ou essaye windev ?) !

Reply

Marsh Posté le 24-03-2005 à 11:24:52    

charabia....je suis définitivement nul...

Reply

Marsh Posté le 24-03-2005 à 19:27:47    

baleine2 a écrit :

charabia....je suis définitivement nul...


L'ignorance n'est jamais de la nullité. C'est de baisser les bras qui serait vraiment nul.
 
Je vais essayer de faire un petit résumé
Le format "CSV" est un procédé qui te permet d'enregistrer un document Office dans un format
1) qui conserve les valeurs
2) où t'as pas besoin d'office pour relire ton fichier
En fait, c'est un format "texte" où chaque valeur est séparée de sa voisine par un point-virgule.
Si tu veux essayer, ouvre un document Excel vierge, tape quelques trucs dedans puis enregistre-le au format CSV, puis renomme le .CSV en .txt et ouvre ton fichier avec BlocNote et tu verras mieux le format.
 
Ce format très simple te permet, en comptant les points-virgule, de retrouver la valeur qui t'intéresse. Tu inclues ce compteur dans un programme C et tu peux exploiter ton CSV comme tu veux.
 
Un format XML peut-être sommairement résumé comme une amélioration du CSV mais c'est très simpliste. Un XML c'est un format qui englobe
1) la description des données que tu traites
2) la donnée elle-même
Ainsi, si tu passes un document XML à quelqu'un d'autre, ce quelqu'un peut exploiter le document puisqu'il reçoit à la fois la caractéristique de la donnée et sa valeur.
Exemple de XML
<FAMILLE>
<PERSONNE type="pere">
<PRENOM>Alfred</PRENOM>
<AGE>33</AGE>
</PERSONNE>
<PERSONNE type="mere">
<PRENOM>Augusta</PRENOM>
<AGE>28</AGE>
</PERSONNE>
</FAMILLE>
 
Evidemment, ce genre de document est plus difficile à exploiter que le CSV mais il est aussi plus riche. Pour ton pb, tu peux rester au CSV ce sera plus facile...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 25-03-2005 à 05:29:04    

Sve@r a écrit :

En fait, c'est un format "texte" où chaque valeur est séparée de sa voisine par un point-virgule.


 
Si c'est séparé par un point-virgule peut-on encore appeler ça du CSV :D

Reply

Marsh Posté le 25-03-2005 à 07:51:39    

matafan a écrit :

Si c'est séparé par un point-virgule peut-on encore appeler ça du CSV :D


SCSV!
 
C'est le CSV à la mode Microsoft...
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 25-03-2005 à 11:30:37    

ok, les caractéristiques du fichier CSV sont à peu près comprises...par contre, mon plus gros point faible c'est que je n'arrive pas à faire les connections avec borland.
Comment je fais pour accéder à la donnée de la ligne 3, colonne 2, par exemple? je récupère sous format text que je dois convertir en float pour faire des calculs? puis en suite, pour transporter une valeur dans mon fichier CSV, je dois aussi la transformer en caractères?

Reply

Marsh Posté le 25-03-2005 à 11:42:56    

baleine2 a écrit :

ok, les caractéristiques du fichier CSV sont à peu près comprises...par contre, mon plus gros point faible c'est que je n'arrive pas à faire les connections avec borland.
Comment je fais pour accéder à la donnée de la ligne 3, colonne 2, par exemple? je récupère sous format text que je dois convertir en float pour faire des calculs? puis en suite, pour transporter une valeur dans mon fichier CSV, je dois aussi la transformer en caractères?


Ben oui...

  • Tu ouvres le fichier en lecture texte ("r" )
  • Tu lis chaque ligne avec fgets() (tu comptes les lignes, ca te sert de repère)
  • Tu parses les colonnes (séparées par des ';'), tu convertis en valeurs numériques, eventuellement stockées dans un tableau, ou bien tu notes les coordonnées...
  • Tu modifie les valeurs
  • Tu recrées une ligne 'CSV' correspondant à ta modif (sans modifier les autres cellulles)
  • Tu recopies le fichier original dans un autre en substituant la ligne modifiée...


Rien que du traitement de données de base... à faire avec méthode et rigueur comme d'habitude...


Message édité par Emmanuel Delahaye le 25-03-2005 à 12:05:08

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 25-03-2005 à 13:01:45    

Emmanuel Delahaye a écrit :

Ben oui...
Rien que du traitement de données de base... à faire avec méthode et rigueur comme d'habitude...


Bienvenue dans le monde merveilleux du C... :D  


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 25-03-2005 à 13:12:19    

ok, merci bcp...je vous remercie pour votre patience...

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed