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 :

Ecriture et lecture d'un fichier


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 39
    Points : 24
    Points
    24
    Par défaut Ecriture et lecture d'un fichier
    Bonjour,
    Dans un programme je suis amené à écrire puis à lire des données dans un fichier mais j'ai besoin de les lire ou d'arriver à les écrire dans un ordre particulier afin de créer un bitmap a partir de ces données.
    Actuellement mes données sont tout d'abord stocker sous forme d'un tableau de matrice de booléen
    10 11 00 01 10 01
    10 00 11 01 01 10
    Je les stock ensuite dans mon fichier en les lisant l'une apres l'autre et j’obtiens donc 1010 1100 0011 0101 1001 0110
    Mais moi j'aimerais obtenir
    101100011001
    100011010110
    avec des lignes de 256 caractères ou au moins pouvoir les lire dans cet ordre si quelqu'un a une idée
    Merci d'avance pour votre aide.

  2. #2
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut
    Pourrais-tu montré le code ou tu stock tes données, sous quelle forme elles sont stockées (vector, map, tableaux).
    Pas de solution, pas de probleme

    Une réponse utile (ou +1) ->
    Une réponse inutile ou pas d'accord -> et expliquer pourquoi
    Une réponse à votre question


  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 39
    Points : 24
    Points
    24
    Par défaut
    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
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
     
    cases::cases(bool c)
    {
    	coul= c;
     
    }
     
    matrice::matrice()
    {
    	FILE *fic=NULL;
    	fic=fopen("./test.txt","at+");
    	tab= new cases**[2];
     
        for(int i=0;i<2;i++)
        {
            tab[i]=new cases*[2];
            for (int j=0;j<2;j++)
            {
    			tab[i][j]=NULL;
     
     
     
    		}
    	}
     
     
    	if(flag==0)
    	{
    		srand((unsigned)(time(&flag)));;
    		flag++;
    	}	
    int j=1+(int) (6*rand()/(RAND_MAX+1.0));
     
     
    fprintf(fic, "[%d]", j)	;
    			switch (j)
                                {
                                    case 1:
    									tab[0][0]=new cases(true);
    									tab[0][1]=new cases(true);
    									tab[1][0]=new cases(false);
    									tab[1][1]=new cases(false);
                                        break;
                                    case 2:
                                        tab[0][0]=new cases(true);
    									tab[0][1]=new cases(false);
    									tab[1][0]=new cases(true);
    									tab[1][1]=new cases(false);
                                        break;
                                    case 3:
                                        tab[0][0]=new cases(true);
    									tab[0][1]=new cases(false);
    									tab[1][0]=new cases(false);
    									tab[1][1]=new cases(true);
                                        break;
                                    case 4:
                                        tab[0][0]=new cases(false);
    									tab[0][1]=new cases(true);
    									tab[1][0]=new cases(true);
    									tab[1][1]=new cases(false);
                                        break;
    								case 5:
                                         tab[0][0]=new cases(false);
    									tab[0][1]=new cases(true);
    									tab[1][0]=new cases(false);
    									tab[1][1]=new cases(true);
                                        break;
    								case 6:
                                        tab[0][0]=new cases(false);
    									tab[0][1]=new cases(false);
    									tab[1][0]=new cases(true);
    									tab[1][1]=new cases(true);
     
     
     
                                }
    	fclose(fic);
     
    }
     
     
    filtre::filtre(int n)
    {
    	nb=n;
     
    	tab = new matrice*[n+1];
     
    	for (int i=0;i<n;i++)
    	{
     
    		tab[i] = new matrice;
    	}
     
    }
    J'ai des cases dont l'un des attributs est un booleen, puis j'ai une classe matrice qui est un tableau 2*2 de ces cases puis je creer un filtre qui est un tableau de ces matrices.

  4. #4
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut
    Je résume, dis moi si je me trompe:

    4 cases par matrice,
    un nombre X de matrice
    pour une matrice de ce type:
    {0,1,1,0}
    tu veux un affichage de ce type:
    01
    10
    c'est ça?

    pour 2 matrices:
    {0,1,1,0},{1,0,1,1}
    un affichage comme ça:
    0110
    1011
    Pas de solution, pas de probleme

    Une réponse utile (ou +1) ->
    Une réponse inutile ou pas d'accord -> et expliquer pourquoi
    Une réponse à votre question


  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 39
    Points : 24
    Points
    24
    Par défaut
    Oui c'est exactement ça

  6. #6
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut
    Oki beh la je vois la solution :

    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
     
    //implémentation des crochet
    bool  matrice::operator[](int a)
    {
      int x=(a-1>0?a-1:0);
      int y=(a%2);
      return (tab[x][y]->coul); //ou alors tu creer un accesseur bool getcoul()
    }
     
    int a=0;
    while (tab[a]) //Parcour de ta liste de matrice pour la première ligne
    {
      char aff[2];
      aff[0]=(tab[a][0]==true?'1':'0');
      aff[1]=(tab[a][1]==true?'1':'0');
      write(tonfichier,aff,2);
      a++;
    }
    write(tonfichier,'\n',1);
    a=0;
    while (tab[a]) //Parcour de ta liste de matrice pour la deuxieme ligne
    {
      char aff[2];
      aff[0]=(tab[a][2]==true?'1':'0');
      aff[1]=(tab[a][3]==true?'1':'0');
      write(tonfichier,aff,2);
      a++;
    }
    pour des matrice comme sa:
    {0,1,1,0},{1,1,0,1}

    Sa écrira:
    0111 avec la première boucle
    \n
    1001 vec la deuxieme boucle

    Voilou demande moi si c'est pas clair
    Pas de solution, pas de probleme

    Une réponse utile (ou +1) ->
    Une réponse inutile ou pas d'accord -> et expliquer pourquoi
    Une réponse à votre question


  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 39
    Points : 24
    Points
    24
    Par défaut
    Ok merci d’essai ça tout de suite et je te tiens au courant

  8. #8
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut
    Mon code aura surement besoin d'être adapté à ton utilisation (évite de faire un copier coller et de me dire: "ça marche pas") mais la base est là
    Pas de solution, pas de probleme

    Une réponse utile (ou +1) ->
    Une réponse inutile ou pas d'accord -> et expliquer pourquoi
    Une réponse à votre question


  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 39
    Points : 24
    Points
    24
    Par défaut
    Bonjour,
    J'ai finalement réussi à trier le fichier comme je l'entendais en m'inspirant de ton code.
    J'ai donc maintenant un fichier de 256 lignes et 256 colonnes et je veux utiliser les données de ce fichier afin d'enregistrer un bitmap de 256*256 j'ai utiliser le code qui suit mais j'ai l'impression que dans ma condition sur le caractère lut sur le fichier je passe toujours dans le else{} je fait peut etre une erreur au niveau de la comparaison ou bien cela vient-il d'autre-part
    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
     
    void filtre::Create_Save_BMP()
    {
     
    	std::ifstream fichier("./tri.txt", std::ios::in);
     
    	 char caractere;
    	int c=0,i=0;
        int x=0;
        int iWidth = 256;
        int iHeight = 256;
        HANDLE file;
        BITMAPFILEHEADER fileHeader;
        BITMAPINFOHEADER fileInfo;
        RGBTRIPLE image;
        DWORD write = 0;
     
        file = CreateFile("examplea.bmp",GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
        fileHeader.bfType = 19778;
        fileHeader.bfSize = sizeof(fileHeader.bfOffBits) + sizeof(RGBTRIPLE);
        fileHeader.bfReserved1 = 0;
        fileHeader.bfReserved2 = 0;
        fileHeader.bfOffBits = sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
     
        fileInfo.biSize = sizeof(BITMAPINFOHEADER);
        fileInfo.biWidth = iWidth;
        fileInfo.biHeight = iHeight;
        fileInfo.biPlanes = 1;
        fileInfo.biBitCount = 24;
        fileInfo.biCompression = BI_RGB;
        fileInfo.biSizeImage = 0;
        fileInfo.biXPelsPerMeter = 0;
        fileInfo.biYPelsPerMeter = 0;
        fileInfo.biClrImportant = 0;
        fileInfo.biClrUsed = 0;
     
        WriteFile(file,&fileHeader,sizeof(fileHeader),&write,NULL);
        WriteFile(file,&fileInfo,sizeof(fileInfo),&write,NULL);
     
     
        while((i < (iWidth*iHeight)))
        {
    		fichier.get(caractere);
            if (strcmp(&caractere,"0")==0)// le probleme doit je pense se situer au niveau de cette condition
               {
    			x=254;
    			}
            else 
    		{
    			x=4;
    		}
            image.rgbtBlue = x-1;
            image.rgbtGreen = x-1;
            image.rgbtRed = x-1;
            WriteFile(file, &image, sizeof(RGBTRIPLE), &write, NULL);
    		i++;
     
        }
        CloseHandle(file);
    	fichier.close();
     
    }

  10. #10
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut
    essaye comme ça:

    Pas de solution, pas de probleme

    Une réponse utile (ou +1) ->
    Une réponse inutile ou pas d'accord -> et expliquer pourquoi
    Une réponse à votre question


  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 39
    Points : 24
    Points
    24
    Par défaut
    Oui c'est ca merci mais pour la comparaison de chaine je croyais qu'on devais toujours utiliser strcmp(char*,char*) comment ca se fait que l'on puisse tout simplement utiliser '==' ?

  12. #12
    Membre émérite
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Points : 2 677
    Points
    2 677
    Par défaut
    Ici ce n'est pas une chaine de caractères mais 1 seul et unique caractère.
    Vous postez du code ? Merci d'utiliser les balises
    Un message vous paraît pertinent ? Merci de le gratifier d'un vote positif
    Vous avez obtenu une réponse à votre question ? Merci d'utiliser le tag
    __________________
    Ingénieur R&D, diplômé en 2007 de l'ISIMA
    Docteur en informatique, diplômé en 2015 de l'EDSPI de Clermont-Ferrand

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] ecriture et lecture d'un fichier PHP qui génère du XML
    Par leoAlB dans le forum C#
    Réponses: 7
    Dernier message: 18/06/2014, 16h00
  2. Ecriture et lecture d'un fichier config
    Par YvesP dans le forum Windows Forms
    Réponses: 2
    Dernier message: 03/01/2010, 19h10
  3. Ecriture et lecture dans un fichier
    Par laetous dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 23/08/2006, 17h59

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