IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Comment savoir si le contenu d'un fichier est vide ?


Sujet :

C

  1. #21
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    Bonjour,

    alors ça ne marche toujours pas

    voila la partie du code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
    while (1)
    		{
     
    			int i=0;
     
    			ReadFile(hdl,buf,sizeof (buf),&nblu,NULL);
    			if (etat==-1)
    			{
    				printf ("Erreur lecture port : erreur %d\n\n", GetLastError());
    			}
     
     
     
     
    			if (nblu==18)
    			{
     
    				for (buf [i]; i < 18; i++)
    				{
    					printf ("Octets lus %d: %X\n\n", i, buf[i]);
     
     
     
    				}
     
    				int j=0;
    				rewind(fichier);
     
     
    				// Boucle de lecture des caractères un à un
    				while (fgetc(fichier) != EOF)
    				{
     
    					j++;
    				}
     
     
    				if (j==0)
    				{
    					fprintf (fichier, "\n");
    					fprintf (fichier, "%d", buf[4]);
    					fprintf (fichier, "%d", buf[5]);
    					fprintf (fichier, "%d\n", buf[6]);
    				}
     
     
    					fseek (fichier, sizeof(fichier), SEEK_END );
     
    					FormatFloat("0.000",buf[9]) ;
    					fprintf (fichier, "%d", buf[9]/10);
    					fprintf (fichier, " ");
    					fprintf (fichier, "%d", buf[11]/10);
    					fprintf (fichier, " ");
    					FormatFloat("0.0",buf[13]) ;
    					fprintf (fichier, "%d", buf[13]/10);
    					fprintf (fichier, " ");
    					fprintf (fichier, "%d", buf[14]);
    					fprintf (fichier, "-");
    					fprintf (fichier, "%s\n" , Date.TimeString() );
     
     
    					printf ("Stockage \n\n");
     
     
    					fclose (fichier);
    			 }
     
     
     
    		}
    Si quelqu'un peut me dire pourquoi ça fait cela ???

  2. #22
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    C'est bon !!!

    Le problème venait qu'il fallait que j'ouvre mon fichier à l'intérieur de la boucle, et donc tout fonctionne maintenant !!!

    Par contre, il y a une mesure de température sur un octet : par exemple une valeur de 235 en décimal correspond à une température de 23.5°C, mais avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    FormatFloat("0.0",buf[13]) ;
    fprintf (fichier, "%d", buf[13]/10);
    La température écrite dans le fichier est 23 au lieu de 23.5 !!!!

  3. #23
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par c_boireau Voir le message
    C'est bon !!!

    Le problème venait qu'il fallait que j'ouvre mon fichier à l'intérieur de la boucle, et donc tout fonctionne maintenant !!!

    Par contre, il y a une mesure de température sur un octet : par exemple une valeur de 235 en décimal correspond à une température de 23.5°C, mais avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    FormatFloat("0.0",buf[13]) ;
    fprintf (fichier, "%d", buf[13]/10);
    La température écrite dans le fichier est 23 au lieu de 23.5 !!!!
    LIT la doc.....

    tu écris avec le format des entiers (%d) donc il n'y a aucune raison que ça te mette les décimales....
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  4. #24
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    Oups !!!

    Pardon, donc il faut que j'utilise "%f" ????

  5. #25
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    Beh, il y a un soucis car avec "%f" le resultat maintenant est : 0.000000 !!!!!
    C'est encore moins ce que je veux insrire !!!


  6. #26
    Nouveau membre du Club
    Inscrit en
    Juillet 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Juillet 2008
    Messages : 56
    Points : 30
    Points
    30
    Par défaut
    Moi j'ai une mini remarque à faire. Quand j'ai commencé à programmer en C++, j'ai voulu m'insipirer de votre méthode de calcul de taille d'un fichier texte, et, en tant qu'insouciant du pointeur, issu de la génération java. Je pense que pour connaitre la taille entiere du fichier, il est mieux de mettre Fichier.seekg(0);
    Car en fait je faisais appel à la fonction taille_fichier, après avoir deja un peu travailler mon txt.
    Enfin bref, petite remarque anodine, en débutant il faut etre vigilent!
    Bonne journée

  7. #27
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    Beh, il y a un soucis car avec "%f" le resultat maintenant est : 0.000000 !!!!!
    C'est encore moins ce que je veux insrire !!!
    Peut-être en castant ta variable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fprintf (fichier, "%f", (float)buf[13]/10);

  8. #28
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    euh..

    buf est un buffer de char, non ??
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  9. #29
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Points : 8 873
    Points
    8 873
    Par défaut
    Je pense que oui...

    Pour en être sûr ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("%f\n", strtod(buf[13], NULL) / 10.0);
    (y a certes pas de contrôles, mais bon...)

    ++
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  10. #30
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    effectivement, c'est un buffer de char !!

  11. #31
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Points : 8 873
    Points
    8 873
    Par défaut
    Citation Envoyé par c_boireau Voir le message
    effectivement, c'est un buffer de char !!
    Et donc? En utilisant strtod comme préconisé plus haut, ça fonctionne?

    De plus, diviser par 10.0 n'est pas une mauvaise chose pour être sûr d'obtenir le résultat de la division en double

    ++
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  12. #32
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    C'est sûr, mais cela m'inscrit dans mon fichier une valeur par exemple de 23.800000

    J'aimerai juste avoir 23.8

  13. #33
    Membre expérimenté Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Points : 1 544
    Points
    1 544
    Par défaut
    pour ca rien de tel qu un bon rtfm
    on a jamais fait mieux
    "vaste programme"

  14. #34
    Membre expérimenté
    Avatar de muad'dib
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 011
    Points : 1 375
    Points
    1 375
    Par défaut
    Utilise %.2f au lieu de %f

  15. #35
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    Ok, ça marche !!

    Je ne savais pas que l'on pouvait faire comme cela , maintenant oui !!!

    Mais si l'on veut mettre 23,8 au lieu de 23.8 ????

  16. #36
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Points : 8 873
    Points
    8 873
    Par défaut
    Citation Envoyé par c_boireau Voir le message
    Ok, ça marche !!

    Je ne savais pas que l'on pouvait faire comme cela , maintenant oui !!!

    Mais si l'on veut mettre 23,8 au lieu de 23.8 ????
    man setlocale (du côté de LC_NUMERIC)

    Bonne lecture !
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  17. #37
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    Ok, merci pour la doc !!!

    Par contre ça ne marche toujours pas !!

    J'ai vu aussi que cela pourrait marcher avec " DecimalSeparator=',' ", est ce possible ???

  18. #38
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Points : 8 873
    Points
    8 873
    Par défaut
    Soit plus précis quand tu dis que ça ne marche pas !

    Qu'es-ce qui ne fonctionne pas? As-tu des erreurs? Des exemples précis à nous montrer?

    Pour information, si tu utilises setlocale, lors du strtod, il faut que les nombres qui sont dans ton buf, soit également écrit avec une virgule !

    Donc ton tableau buf doit contenir des tableaux sous la forme : "2,3" ou "10,2" et non plus "2.3" ou "10.2"
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  19. #39
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    je n'utilise pas strtod(), j'ai fait comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fprintf (fichier, "%.1f", (float)buf[13]/10.0);
    Et cela m'inscrit par exemple 23.5 dans le fichier, et j'aimerai que ça soit 23,5 qui soit inscrit !!!

  20. #40
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Points : 100
    Points
    100
    Par défaut
    C'est agaçant à la fin, ça ne fonctionne pas non plus en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SetLocaleInfo(LOCALE_SYSTEM_DEFAULT, LOCALE_SDECIMAL, ",");


    Je sais pas comment faire !!!

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. [Cryptographie]Comment savoir que le cryptage d'un fichier a été cassé ?
    Par Janitrix dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 05/09/2007, 20h46
  2. Comment savoir si le champ d'une table est vide?
    Par CleeM dans le forum Bases de données
    Réponses: 2
    Dernier message: 14/07/2007, 11h35
  3. [MySQL] Comment savoir si le contenu d'un champ a été modifié avant mise à jour
    Par lodan dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 02/12/2006, 12h05
  4. Réponses: 5
    Dernier message: 16/03/2005, 22h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo