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 :

Modifier un caractere d'un fichier


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Modifier un caractere d'un fichier
    Bonjour a tous

    Je souhaiterais modifier un caractère dans un fichier comme suit :

    Je recherche la position de ce caractere en parcourant le fichier //OK
    Dès que je le trouve, je le remplace //Pas OK
    Et je reste au même endroit je ne ferme pas le fichier tout de suite. //OK

    Je ne sais pas du tout si c'est possible et un demi heure de recherche sur google et ici n'as rien donné.

    Si quelqu'un sait comment faire

    Dite moi si vous voulez voir mon code

  2. #2
    Membre chevronné
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Points : 2 208
    Points
    2 208
    Par défaut
    Dite moi si vous voulez voir mon code
    oui on veut bien


    Mes publications
    Lisez
    Les régles du forum
    Pensez au bouton

  3. #3
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut Re: Modifier un caractere d'un fichier
    Bonjour,
    Citation Envoyé par elaum
    Je ne sais pas du tout si c'est possible et un demi heure de recherche sur google et ici n'as rien donné.
    Je pense que ceci devrait d'aider : Comment supprimer une ligne dans un fichier

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Merci j'avais déjà lu ça mais je cherchais un moyen plus simple et surtout plus rapide que de recopier le fichier en entier a chaque appel de la fonction


    Le code (en gros ça cherche le #define qui définis une certaine clef le but est de remplacer sa valeur pour pouvoir recompiler le fichier (sorte de petite IA))
    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
    void ChangerKeys(FILE *Thefile, unsigned int nbarg, ...)
    {
    	va_list adpar;
    	int i;
    	char c;
    	unsigned int TestDefine;
    	double keyvalue_arg,valuetmp;
    	char keyname_arg[10],strtmp[10];
    	va_start(adpar,nbarg);
     
    	for ( i = 0 ; i < nbarg ; i++)
    	{
    		keyvalue_arg = va_arg(adpar,double);//Recupere la valeur de la clef
    		strcpy(keyname_arg,va_arg(adpar,char *));//Recupere le nom de la clef
    		printf("Argument %i : %f %s\n",i,keyvalue_arg,keyname_arg);
    		do {
    			TestDefine = 0;
    			while ((TestDefine != 2 ) &&((c=fgetc(Thefile)) != EOF))
    			{
    				if (c =='#')
    				{
    					TestDefine = 1;
    				} 
    				if ((c == 'd') && (TestDefine)) TestDefine = 2;
    			}
    			if (c == EOF)//Si on a atteind la fin du fichier, c'est pas normal
    			{
    				printf("Erreur lors de la recherche de clef, fin de fichier atteinte.");
    				abort();
    			}
    			fseek(Thefile,6 * sizeof(char), SEEK_CUR);
    			//La position du fichier est maintenant après le #define
    			fscanf(Thefile,"%s",strtmp);//Lecture de la clef
    		} while (strcmp(strtmp,keyname_arg) != 0);
    		//On a trouve la bonne clef (strtmp)
    		fscanf(Thefile,"%i",&valuetmp);
    		printf("%i",valuetmp);
    //Probleme : changer la valueur valuetmp par keyvalue_arg
    	}
    }
    En tout cas merci de ces reponse rapides (jamais vus ça, c'est le forum de Lucky Luke ou quoi)

  5. #5
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    Pour que fgetc fonctionne correctement, il faut que c soit un int, pas un char !
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Bon pour ceux que ca interesse voila le code modifié pour recopier un fichier temporaire (et int c au lieu de char c)

    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
    void ChangerKeys(char *Thefilestr, unsigned int nbarg, ...)
    {
    	FILE *Thefile,*tmpfile;
    	va_list adpar;
    	int i,c;
    	unsigned int TestDefine;
    	double keyvalue_arg,valuetmp;
    	char keyname_arg[10],strtmp[10];
    	va_start(adpar,nbarg);
     
    	Thefile = fopen(Thefilestr,"r+");
    	tmpfile = fopen("tmpfile","w");
    	if ((Thefile == NULL) || (tmpfile == NULL))
    	{ 
    		printf("Erreur le fichier est introuvable ou increable");
    		abort();
    	}
    	for ( i = 0 ; i < nbarg ; i++)
    	{
    		keyvalue_arg = va_arg(adpar,double);//Recupere la valeur de la clef
    		strcpy(keyname_arg,va_arg(adpar,char *));//Recupere le nom de la clef
    		do {
    			TestDefine = 0;
    			while ((TestDefine != 2 ) &&((c=fgetc(Thefile)) != EOF))
    			{
    				fprintf(tmpfile,"%c",c);
    				if (c =='#')
    				{
    					TestDefine = 1;
    				} 
    				if ((c == 'd') && (TestDefine)) TestDefine = 2;
    			}
    			if (c == EOF)//Si on a atteind la fin du fichier, c'est pas normal
    			{
    				printf("\n\nErreur lors de la recherche de clef %s, fin de fichier atteinte.\n\n",keyname_arg);
    				abort();
    			}
    			fprintf(tmpfile,"efine ");
    			fseek(Thefile,6 * sizeof(char),SEEK_CUR);
    			//La position du fichier est maintenant après le #define
    			fscanf(Thefile,"%s",strtmp);//Lecture de la clef
    			fprintf(tmpfile,"%s",strtmp);
    		} while (strcmp(strtmp,keyname_arg) != 0);
    		//On a trouve la bonne clef (strtmp)
    		fscanf(Thefile,"%f",&valuetmp);
    		fprintf(tmpfile," %lf",keyvalue_arg);
    	}
    	while ((c=fgetc(Thefile)) != EOF)
    	{
    		fprintf(tmpfile,"%c",c);
    	}
    	rename("tmpfile",Thefilestr);
    	fclose(tmpfile);
    	fclose(Thefile);
    }
    Mais si quelqu'un a une autre idée, qu'il se manifeste

  7. #7
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Qu'est ce qui ne marche pas au juste?
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Rien ca marche je demandais s'il existait un moyen autre que la recopie d'un fichier pour pouvoir remplacer un caractère dans un fichier

    Mais bon ca marche bien que ce soit un peut long

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par elaum
    Rien ca marche je demandais s'il existait un moyen autre que la recopie d'un fichier pour pouvoir remplacer un caractère dans un fichier
    Ca devrait le faire avec "w+" ou "r+", je ne sais plus lequel... Mais pour remplacement uniquement. Pas question de modifier la taille du fichier.
    Pas de Wi-Fi à la maison : CPL

  10. #10
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Est-ce que tu as vérifié la valeur retournée par fseek qui ne marche que pour les flux positionnables.
    Fais un petit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(fseek(Thefile,6 * sizeof(char),SEEK_CUR) == EBADF) { ... }
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

Discussions similaires

  1. modifier un caractere dans un fichier
    Par gilloux dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 26/10/2007, 22h11
  2. [langage] recuperer 8 caracteres dans un fichier
    Par ifan dans le forum Langage
    Réponses: 12
    Dernier message: 24/05/2005, 17h01
  3. Modifier une ligne d'un fichier
    Par jula dans le forum Linux
    Réponses: 4
    Dernier message: 08/04/2005, 17h24
  4. comment modifier les attributs d'un fichier?
    Par kamal101 dans le forum C++
    Réponses: 1
    Dernier message: 18/03/2005, 14h16
  5. remplacer un caractere dans un fichier
    Par ickis dans le forum C
    Réponses: 11
    Dernier message: 13/10/2003, 09h29

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