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 :

Changer une valeur dans un fichier


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 21
    Par défaut Changer une valeur dans un fichier
    Bonjour,

    dans mon fichier j'ai une ligne de la forme :
    p cnf 50 218
    les valeurs peuvent donc être différentes suivants les fichiers mais cette ligne contient toujous ces quatre informations

    j'aurais besoin d'ajouter 1 à la 4e valeur

    comment pourrais-je faire ??

    merci d'avance

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 480
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 480
    Par défaut
    Le C n'est peut-être pas le meilleur outil pour faire ce genre de choses. Sous UNIX, j'aurais utilisé awk, par exemple.

    Mais tu peux faire un programme qui lise tes lignes une par une avec fgets(), utiliser sscanf() pour récupérer toutes tes valeurs et réécrire le tout, éventuellement modifié, avec printf().

  3. #3
    Membre averti
    Inscrit en
    Mars 2010
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 21
    Par défaut
    rebonjour !!

    voici ma fonction :

    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
    void ajouter1Clause(FILE *fp, char *c, int *tab)
    {
    	//int tab[4];
    	char *pointeur;
    	char *separateur = { " " };
    	int i = 0;
    	int n;
     
    	pointeur = strtok(c, separateur);
     
    	sscanf(pointeur, "%d", &n);
    	tab[i] = n;
    	printf("tab[%d] = %d\n",i,tab[i]);
     
    	while( pointeur != NULL && i<2)
    	{
    		// Cherche les autres separateur
    		pointeur = strtok( NULL, separateur );
     
    		if ( pointeur != NULL )
    		{
    			i++; // increment du nombre de mot
    			sscanf(pointeur, "%d", &n);
    			tab[i] = n;
    			printf("tab[%d] = %d\n",i,tab[i]);			
    		}
    	}
    	pointeur = strtok(NULL, separateur);
    	i++;
    	sscanf(pointeur, "%d", &n);
    	tab[i] = n+1;
    	printf("tab[%d] = %d\n",i,tab[i]);
    	sprintf(pointeur, "%d", tab[i]);
    	printf("pointeur : %s\n",pointeur);
    	fprintf(fp, "%s", pointeur);
    }
    et malheureusement cela ne remplace pas ma derniere valeur mais cela ajoute bien celle-ci ajoutée de 1 à la ligne suivante

    quelqu'un pourrait-il m'expliquer mon erreur ?

    merci d'avance

  4. #4
    Membre émérite
    Avatar de Elijha
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Avril 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2003
    Messages : 314
    Par défaut
    Salut,

    Le seul moyen "d'écraser" ta 4ième valeur, c'est de détruire (sauver) ton fichier, puis le réécrire.

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par guigz57 Voir le message
    rebonjour !!

    voici ma fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void ajouter1Clause(FILE *fp, char *c, int *tab)
    {
    	...
    	fprintf(fp, "%s", pointeur);
    }
    et malheureusement cela ne remplace pas ma derniere valeur mais cela ajoute bien celle-ci ajoutée de 1 à la ligne suivante

    quelqu'un pourrait-il m'expliquer mon erreur ?

    merci d'avance
    Tout dépend de la façon dont t'as ouvert ton fichier (probablement mode "a") et/ou de la valeur du positionnement interne de ton fp (probablement en fin de fichier).
    Document-toi sur fseek().

    Accessoirement, la fonction strtok() n'est pas la plus recommandée (gros risques de collision surtout si t'utilises plusieurs fois "ajouter1Clause" dans des boucles imbriquées) !!!

    Citation Envoyé par Elijha Voir le message
    Salut,

    Le seul moyen "d'écraser" ta 4ième valeur, c'est de détruire (sauver) ton fichier, puis le réécrire.
    Non, ce n'est pas le seul. Tu peux aussi te positionner sur l'emplacement du fichier contenant la valeur à remplacer (fseek) et écrire par dessus...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Non, ce n'est pas le seul. Tu peux aussi te positionner sur l'emplacement du fichier contenant la valeur à remplacer (fseek) et écrire par dessus...
    Oui éventuellement mais uniquement si ce que tu cherches à écrire à exactement la même taille que ce que tu cherches à remplacer.

Discussions similaires

  1. [XSLT] Tester la non présence d'une valeur dans un fichier
    Par arnauann dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 23/01/2007, 15h29
  2. [Débutant] Changer une valeur dans une autre base
    Par Cyphen dans le forum Access
    Réponses: 5
    Dernier message: 18/08/2006, 15h26
  3. Modifier une valeur dans un fichier sans passer par l'éditeur
    Par elkhy dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 09/06/2006, 00h15
  4. [D6] Recherche d'une valeur dans un fichier
    Par Lung dans le forum Langage
    Réponses: 2
    Dernier message: 06/09/2005, 08h26
  5. Changer une ligne dans un fichier
    Par peuf23 dans le forum Langage
    Réponses: 9
    Dernier message: 03/08/2005, 16h43

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