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 :

Problème de zéro binaire dans un record


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Problème de zéro binaire dans un record
    Bonjour a tous,
    Je vous écris afin de trouver un peu d'aide. Mon problème est le suivant:
    Je dois lire, ligne par ligne, un fichier en entrée, manipuler et modifier certaines parties de chaque ligne et ensuite reconstituer ces lignes avec les nouvelles données afin de recréer le fichier comme a l'origine le tout en langage C.
    Hors mes lignes contiennent des zéros binaires et ceci pose de sérieux problèmes. Toute la partie manipulation des données me pose pas de problème. Mais par contre, pour ce qui est de lire et écrire une ligne dans un fichier lorsqu'il y a des zéros binaires c'est moins évident. Pour ce qui est de la lecture j'ai l'impression que le bon vieux fgets fonctionne. Par contre mes essais avec fwrite, fprintf fputs ne marchent pas. Les zéros binaires ne sont pas pris en charge et mettent le bazar dans mes données.
    Quelqu'un aurait il une solution a ce problème??
    Je vous remercie d'avance de votre aide.
    Cdt
    Thefifou

  2. #2
    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
    Salut

    C'est assez difficile de répondre comme ça, vu que tu nous donnes ni le code source C, ni le format de ton fichier binaire.

    Il faudrait que tu nous donnes davantage de précisions sur tout ceci.

  3. #3
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    C'est clair que si il y a des 0 binaires, toutes les fonctions fgets(), fscanf() et autres fopen(), fread() ne fonctionneront pas.

    Si ton fichier contient des 0 binaires, ce n'est pas un fichier texte, c'est un fichier binaire et donc il faut le traiter comme un fichier binaire avec les fonctions adéquates : open(), read(), write() et autres.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  4. #4
    Membre éprouvé Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Points : 1 132
    Points
    1 132
    Par défaut
    Citation Envoyé par ram-0000 Voir le message
    C'est clair que si il y a des 0 binaires, toutes les fonctions fgets(), fscanf() et autres fopen(), fread() ne fonctionneront pas.

    Si ton fichier contient des 0 binaires, ce n'est pas un fichier texte, c'est un fichier binaire et donc il faut le traiter comme un fichier binaire avec les fonctions adéquates : open(), read(), write() et autres.
    Justement fread/fwrite sont faîtes pour cela.
    To start press any key. (reading screen) Where's the "any" key? I see Esc, Catarl, and Pig Up. There doesn't seem to be any "any" key. Wo! All this computer hacking is making me thirsty. I think I'll order a Tab. (presses TAB key). -- HOMER --

  5. #5
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Par contre il est vrai que la présence de zéros binaires fait que le fichier doit être traité comme un fichier binaire et non comme un fichier texte, dans ce cas le mode d'ouverture spécifié dans fopen doit juste inclure le "b", par exemple "rb" pour "r" (open for read only) et "b" (open in binary mode), mais on pourra continuer à utiliser fwrite/fread bien sûr. open, read, write et autres ne font pas partie des fonctions standard du C.

  6. #6
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Pourquoi fgets() n'est-il pas utilisable dans ce cas ?
    La norme ne dit pas que fgets() lit une chaine de caractères (terminée par 0) mais une ligne : elle ne se préoccupe que de la présence du '\n' et de la fin du fichier. Il n'est rien dit à priori sur la présence d'un 0 dans une ligne.

    De même, il n'est pas évident qu'il faille ouvrir le fichier en binaire, puisque, d'après l'exposé du problème, le fichier est organisé en lignes (un peu spéciales certes) et l'ouverture en binaire va poser des problèmes sur le codage de la fin de ligne.
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  7. #7
    Membre éprouvé Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Points : 1 132
    Points
    1 132
    Par défaut
    Très juste! toutefois pour ce genre de problème je lui préférerais de loin fread() pour la simple et bonne raison que cette dernière retourne le nombre d'éléments lus, car dans le cas de fgets() cela n'est pas évident.
    To start press any key. (reading screen) Where's the "any" key? I see Esc, Catarl, and Pig Up. There doesn't seem to be any "any" key. Wo! All this computer hacking is making me thirsty. I think I'll order a Tab. (presses TAB key). -- HOMER --

  8. #8
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Citation Envoyé par ssmario2 Voir le message
    Très juste! toutefois pour ce genre de problème je lui préférerais de loin fread() pour la simple et bonne raison que cette dernière retourne le nombre d'éléments lus, car dans le cas de fgets() cela n'est pas évident.
    Oui, mais on se retrouve avec la question de devoir analyser la séquence lue pour recréer la structure en lignes du fichier et on est confronté au problème du codage de la fin de ligne qui est non portable.
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

Discussions similaires

  1. Réponses: 6
    Dernier message: 21/10/2011, 09h47
  2. Réponses: 4
    Dernier message: 23/09/2010, 15h17
  3. Réponses: 7
    Dernier message: 24/11/2006, 09h56
  4. Réponses: 11
    Dernier message: 13/10/2004, 00h58
  5. Problème a l'affichage dans la console (printf)
    Par PhoneKilleR dans le forum C
    Réponses: 21
    Dernier message: 23/09/2003, 17h21

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