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 :

Ecrire dans un fichier binaire


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Homme Profil pro
    �tudiant
    Inscrit en
    Ao�t 2014
    Messages
    71
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - Mat�riel informatique

    Informations forums :
    Inscription : Ao�t 2014
    Messages : 71
    Par d�faut Ecrire dans un fichier binaire
    Bonjour,

    Je travaille sur des fichiers de mesures m�t�orologiques (txt) regroup�es en colonnes. Une fois que j'ai extrait chaque colonne pour pouvoir l'utiliser seule, l'entreprise me demande de stocker ces donn�es sous format 16bits dans un fichier binaire. J'aimerais savoir comment faire pour que, en ouvrant mon fichier de base et en le lisant en ASCII je puisse en faire plusieurs fichiers .bin avec la conversion que cela implique ...
    Ci-dessous le code correspondant � l'extraction des colonnes de donn�es, mais pour le moment la lecture ET l'�criture se font sous format ASCII ...
    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
    72
    73
    74
    75
    76
    77
    78
    79
     
    #include <iostream>
    #include <fstream>
    #include <string>
     
     
    int main()
    {
    using namespace std;
     
     
     
     
     
    	ifstream liste("liste_de_fichiers.txt", ios::in);
     
    	if(liste)
    	{
    		string lisligne;
    		string filename0, filename1,filename2,filename3,filename4;
    		string ligne;
    		double doublea,doubleb,doublec,doubled,doublee,doublef;
    		double double1, double2, double3, double4, double5, double6;
     
     
    		while(getline(liste, lisligne))
    		{
     
    				liste >> filename0; //lecture du nom de fichier dans un fichier "liste de fichiers"
    				filename1 = "/home/rs/Desktop/eclats/" + filename0 + "_1"; //création du nom du fichier où sera retranscrite la colonne 1
    				filename2 = "/home/rs/Desktop/eclats/" + filename0 + "_2"; //colonne 2
    				filename3 = "/home/rs/Desktop/eclats/" + filename0 + "_3"; // 3
    				filename4 = "/home/rs/Desktop/eclats/" + filename0 + "_4"; // 4
    				filename0 = "/home/rs/Desktop/données_modèles/données_modèles/2011/" + filename0; //Nom du fichier de base (avec toutes les colonnes)
     
    				ifstream fichier0(filename0.c_str(), ios::in); //fichier lecture
    				ofstream fichier1(filename1.c_str(), ios::out); // ecritures
    				ofstream fichier2(filename2.c_str(), ios::out);
    				ofstream fichier3(filename3.c_str(), ios::out);
    				ofstream fichier4(filename4.c_str(), ios::out);
     
    				if(fichier0 && fichier1 && fichier2 && fichier3 && fichier4)
    					{
     
    							fichier0 >> doublea >> doubleb >> doublec >> doubled >> doublee >> doublef; //lecture des 6 colonnes
    							//retranscription d'une colonne par fichier							
    							fichier1 << doublec*100;
    							fichier2 << doubled*100;
    							fichier3 << doublee*100;
    							fichier4 << doublef*100;
    						while(getline(fichier0, ligne))  // tant que l'on peut mettre la ligne dans "contenu"
    						{							
     
    									fichier0 >> double1 >> double2 >> double3 >> double4 >> double5 >> double6;
    									fichier1 << double3*100;
    									fichier2 << double4*100;
    									fichier3 << double5*100;
    									fichier4 << double6*100;
     
    						}
    						//fichiers traités
    						cout<<filename0<<endl;
    						cout<<filename1<<endl;
    						cout<<filename2<<endl;
    						cout<<filename3<<endl;
    						cout<<filename4<<endl;
    					}
    					else
    						cerr<<"Impossible d'ouvrir le fichier!1"<<endl;
     
    		}
     
    		liste.close();
    	}
    	else
    		cerr<<"Impossible d'ouvrir le fichier!"<<endl;
     
    	return 0;
    }
    Merci d'avance !

  2. #2
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Tu ne peux utiliser << pour une �criture binaire. Il faut utiliser write().
    Et choisir une endianness (mon exemple est en big-endian).
    Code C++ : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    inline void Write16(ostream& stm, unsigned short value)
    {
    	char serialized[2];
    	serialized[0] = (unsigned char)(value >> 8);
    	serialized[1] = (unsigned char)(value);
    	stm.write(serialized, 2);
    }
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre confirm�
    Homme Profil pro
    �tudiant
    Inscrit en
    Ao�t 2014
    Messages
    71
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - Mat�riel informatique

    Informations forums :
    Inscription : Ao�t 2014
    Messages : 71
    Par d�faut
    Merci pour ta r�ponse !
    En effet, �a marche avec write

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. code huffman,ecrire dans un fichier binaire
    Par fabien335 dans le forum Signal
    R�ponses: 3
    Dernier message: 17/02/2010, 09h14
  2. R�ponses: 3
    Dernier message: 03/08/2009, 11h16
  3. Ecrire dans un fichier binaire en inversant les poids des bits
    Par zejo63 dans le forum Entr�e/Sortie
    R�ponses: 1
    Dernier message: 09/07/2007, 15h11
  4. R�ponses: 9
    Dernier message: 04/06/2007, 21h44

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