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 :

suppression de commentaire d'une image ppm


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut suppression de commentaire d'une image ppm
    bonjour je voudrais effacer les commentaire d'une image en ppm.

    Je me suis basé sur une image faite avec The Gimp.

    Les commentaires commencent par #.

    Le problème est que sous linux ma fonction passe ...Et pas sous windows..

    Voici mon 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
    void supprim_com(FILE *image,char n[])
    {
    	char c;
    	FILE *im_ss_com=fopen(n,"w");
    	fseek(image,0,SEEK_SET);
    	while((c=fgetc(image))!=EOF)
    	{
    		fseek(image,-1,SEEK_CUR);
    		if (c=='#') 
    		{
    			while(fgetc(image)!='\n')
    			{
    				fseek(image,1,SEEK_CUR);
    			}
    		}
    		else
    		{
    			fscanf(image,"%c",&c);
    			fprintf(im_ss_com,"%c",c);
    		}
    	}
    	fclose(im_ss_com);
    }

  2. #2
    Expert confirmé

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    quelle est cette horreur ???

    pourquoi faire compliqué quand on peut faire simple ???

    Des retours en arrière, en avant, des doubles, triples, lectures d'un caractère...

    Ecris noir sur blanc sur une feuille ce que tu veux faire, et code-le ensuite.. Et je suis certain que tu n'arriveras pas à ce code-là..

  3. #3
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut
    je veux enlever les lignes commençant par #, donc si il y a un dièse, je vais jusqu'à la fin de la ligne sans rien faire sinon je copie, mais le fgetc "mange" un caractère donc je reviens en arrière....je ne vois pas d'algorithme plus simple.

  4. #4
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Mais en fait tu te complique la vie...

    Le truc le plus simple est de créer un fichier temporaire en écriture, tu ouvre ton fichier d'origine en lecture puis tu lis ligne par ligne avec fgets, si la ligne ne commence pas par un #, tu l'écrit dans le fichier temporaire. A la fin tu fermes les deux flux puis tu supprime le fichier d'origine et tu renomme le fichier temporaire d'après le nom du fichier d'origine !

    Le test est simple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (ligne[0] != '#')
    {
       /* Tu ecrit la ligne dans le fichier temporaire... */
    }
    Pas de soucis particulier !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  5. #5
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Rniamo
    je veux enlever les lignes commençant par #, donc si il y a un dièse, je vais jusqu'à la fin de la ligne sans rien faire sinon je copie, mais le fgetc "mange" un caractère donc je reviens en arrière....je ne vois pas d'algorithme plus simple.
    Alors installe toi un cerveau plus simple. Celui là est tordu...

  6. #6
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut
    En fait je ne veux pas supprimer le fichier d'origine mais mon fichier temporaire (ok c'est un détail).

    le vrai problème est que je ne sais pas comment lire une ligne quelconque, de plus je n'ai pas chaque ligne dans un tableau...

  7. #7
    Membre éclairé
    Avatar de odsen.s
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 269
    Par défaut
    le vrai problème est que je ne sais pas comment lire une ligne quelconque,
    Comme dit plus haut, fgets() convient.

  8. #8
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par Rniamo
    le vrai problème est que je ne sais pas comment lire une ligne quelconque, de plus je n'ai pas chaque ligne dans un tableau...
    Qu'est-ce que tu me racontes là

    Tu ne lis pas une ligne quelconque, tu lis le fichier ligne par ligne avec fgets ... et chaque ligne dans un tableau ... c'est quoi ca Je n'ai jamais parlé de tableau ! Tu stockes la ligne courante dans un tableau de char (ce que fait fgets) d'une taille suffisante et tu tests le premier caractère pour savoir si c'est un commentaire ou une ligne de pixels !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  9. #9
    Membre éclairé Avatar de Rniamo
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    508
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 508
    Par défaut
    j'ai un peu modifié mon code, mais l'idée reste la même...

    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
    void supprim_com(FILE *image,char n[])
    {
    	char c;
    	FILE *im_ss_com=fopen(n,"w");
    	fseek(image,0,SEEK_SET);
    	while((c=fgetc(image))!=EOF)
    	{
    	    if (c!='#')
    	    {
    	        fprintf(im_ss_com,"%c",c);
    	    }
    	    else
            {
                while(c!='\n')
                {
                    c=fgetc(image);
                }
            }
    	}
    	fclose(im_ss_com);
    }
    c'est bon ça marche

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

Discussions similaires

  1. Suppression des régions d'une image binaire
    Par miss_angel dans le forum Images
    Réponses: 4
    Dernier message: 30/07/2009, 18h21
  2. Lire une image .ppm et inverser ses couleurs
    Par virtuadrack dans le forum C++
    Réponses: 7
    Dernier message: 30/01/2009, 11h55
  3. Lecture d'une image ppm
    Par maestro128 dans le forum Développement 2D, 3D et Jeux
    Réponses: 2
    Dernier message: 26/02/2007, 22h50
  4. Commentaire d'une image sous Firefox
    Par fabrice1596 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 09/06/2005, 11h59
  5. commentaire sur une image
    Par WBO dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 23/05/2005, 09h15

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