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

  FORUM HardWare.fr
  Programmation
  C

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1019698
baleine2
Posté le 21-03-2005 à 13:35:46  profilanswer
 

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

mood
Publicité
Posté le 21-03-2005 à 13:35:46  profilanswer
 

n°1019716
Emmanuel D​elahaye
C is a sharp tool
Posté le 21-03-2005 à 14:01:23  profilanswer
 

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/
n°1019725
baleine2
Posté le 21-03-2005 à 14:09:17  profilanswer
 

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"
???

n°1019737
Emmanuel D​elahaye
C is a sharp tool
Posté le 21-03-2005 à 14:19:44  profilanswer
 

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/
n°1019750
baleine2
Posté le 21-03-2005 à 14:27:58  profilanswer
 

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

n°1019763
moi23372
Posté le 21-03-2005 à 14:34:17  profilanswer
 

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
n°1019764
Emmanuel D​elahaye
C is a sharp tool
Posté le 21-03-2005 à 14:40:01  profilanswer
 

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/
n°1019766
Emmanuel D​elahaye
C is a sharp tool
Posté le 21-03-2005 à 14:41:07  profilanswer
 

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/
n°1019776
baleine2
Posté le 21-03-2005 à 14:50:57  profilanswer
 

voici mon fichier text:


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


 

n°1019814
Emmanuel D​elahaye
C is a sharp tool
Posté le 21-03-2005 à 15:22:52  profilanswer
 

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/
mood
Publicité
Posté le 21-03-2005 à 15:22:52  profilanswer
 

n°1019909
baleine2
Posté le 21-03-2005 à 16:37:26  profilanswer
 

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

n°1019928
Emmanuel D​elahaye
C is a sharp tool
Posté le 21-03-2005 à 16:50:22  profilanswer
 

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/
n°1020816
baleine2
Posté le 22-03-2005 à 11:55:27  profilanswer
 

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?

n°1020878
Emmanuel D​elahaye
C is a sharp tool
Posté le 22-03-2005 à 13:12:54  profilanswer
 

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/
n°1021724
baleine2
Posté le 23-03-2005 à 09:23:57  profilanswer
 

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

n°1021736
Emmanuel D​elahaye
C is a sharp tool
Posté le 23-03-2005 à 09:36:33  profilanswer
 

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/
n°1021747
baleine2
Posté le 23-03-2005 à 09:50:35  profilanswer
 

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

n°1021881
darksword
publicitaire
Posté le 23-03-2005 à 11:39:06  profilanswer
 

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

n°1021945
baleine2
Posté le 23-03-2005 à 12:19:14  profilanswer
 

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

n°1022064
Emmanuel D​elahaye
C is a sharp tool
Posté le 23-03-2005 à 13:06:01  profilanswer
 

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/
n°1022178
darksword
publicitaire
Posté le 23-03-2005 à 14:06:48  profilanswer
 

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

n°1023145
baleine2
Posté le 24-03-2005 à 11:24:52  profilanswer
 

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

n°1024054
Sve@r
Posté le 24-03-2005 à 19:27:47  profilanswer
 

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.
n°1024407
matafan
Posté le 25-03-2005 à 05:29:04  profilanswer
 

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

n°1024414
Emmanuel D​elahaye
C is a sharp tool
Posté le 25-03-2005 à 07:51:39  profilanswer
 

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/
n°1024601
baleine2
Posté le 25-03-2005 à 11:30:37  profilanswer
 

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?

n°1024619
Emmanuel D​elahaye
C is a sharp tool
Posté le 25-03-2005 à 11:42:56  profilanswer
 

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/
n°1024719
Sve@r
Posté le 25-03-2005 à 13:01:45  profilanswer
 

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.
n°1024730
baleine2
Posté le 25-03-2005 à 13:12:19  profilanswer
 

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

mood
Publicité
Posté le   profilanswer
 


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

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

 

Sujets relatifs
Probleme php/MySQL : "Warning mysql_num_rows()"Probleme MySQL : "Warning mysql_num_rows()"
Syntaxe pour faire une requete sql sur un fichier Excel ?creer rang phpBB pose probleme (resolu)
GDI+ graphisme problemeExercice de cryptographie? fichier cpp à complèter?
MFC Problème d'affichage (OnPaint() et ON_WM_PAINT())problème de driver mysql
gros problème de driver jdbcPostgresql : compte du nombre de resultat si pas de LIMIT (how to?)
Plus de sujets relatifs à : problème pour ecriture de résultat dans un fichier text


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