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 :

probleme avec les fichiers en c


Sujet :

C

  1. #21
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 102
    Par défaut
    mais ce n'est pas grave que l'ancien contenu soit effacé, puisque tu auras tout stocké en mémoire !
    tu lis, tu stockes, tu modifies et tu réécris..

    edit: oui et encore moins grave si tu renommes ton fichier source (je parle du fichier que tu charges, pas du code ^^)

  2. #22
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    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 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Trankille Voir le message
    je met juste mon petit grain de sel pour faire mon malin...
    mais çà serait pas le contraire ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char ligne[81];
    fgets(ligne, 81, fp);
    Arf t'as super raison. C'est le pb du code tapé en live. Merci d'avoir vérifié

    Citation Envoyé par Trankille Voir le message
    mais bon.. je te met +1 car tu as fais tout le boulot ^^
    Ah ça c'est sympa !!!


    Citation Envoyé par ibuto Voir le message
    merci de votre aide precieuse sve@r mais permet moi encore d'ajouter que si la sauvegarde se fait avec une entree en fichier" w "tout l'ancien contenu sera ecrase hors dans mon cas je ne sauvegarde qu'un seul adherent mais si je fait une entree dans le fichier avec un "a "la modification sera apporte mais l'anciene valeur restera(quel dilemne) .


    Citation Envoyé par Trankille Voir le message
    mais ce n'est pas grave que l'ancien contenu soit effacé, puisque tu auras tout stocké en mémoire !
    tu lis, tu stockes, tu modifies et tu réécris..
    C'est exactement ce que dit Trankille. Comme tout est chargé en mémoire au préalable, te suffit de tout réécrire dans un fichier neuf. Fatalement, tu te retrouveras avec les données d'origine et aussi les données modifiées ou ajoutées...
    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]

  3. #23
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 54
    Par défaut
    merci de votre aide a tous j'ai plus au moins reussi a depasse ce probleme mais dans la nouvelle facon avec laquelle j'ai aborde le probleme je bloque sur une chose :


    comment supprimer un caractere d'une chaine de caractere de la sorte :
    toto,jean,ibuto je considere tout ca comme une seule chaine et je demande comment supprimer jean par exemple sachant que j'ai pas vraiment de fonction dans la bibliothque string m'aidant dans ce cas precis.

    je sait que c'est un peu hors sujet par rapport au debut mais c'est important pour depasser le probleme qu j'avait au debut.

  4. #24
    Membre Expert
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    952
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 952
    Par défaut
    Citation Envoyé par ibuto Voir le message
    la nouvelle facon avec laquelle j'ai aborde le probleme
    Aïe... Façon qu'on ne connait pas, à priori. Plus de collection ni de structures? Ton histoire de chaine unique fait peur.

  5. #25
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    comment supprimer un caractere d'une chaine de caractere de la sorte :
    toto,jean,ibuto je considere tout ca comme une seule chaine et je demande comment supprimer jean par exemple sachant que j'ai pas vraiment de fonction dans la bibliothque string m'aidant dans ce cas precis.
    Le problème, c'est que, posée comme cela, la question n'a pas de réponse universelle. Ce que je veux dire par là, c'est qu'il faut être plus précis sur la manière dont tu veux supprimer un mot d'une chaine.

    Deux options :

    Est-ce que tu veux supprimer de la chaine un mot donné ? Autrement dit, rechercher une sous-chaîne dans la chaine, et la supprimer. Par exemple, supprimer la sous-chaîne "fait" de la chaîne "il fait beau", pour la transformer en "il beau" ?

    Ou bien est-ce que tu veux supprimer le nième mot d'une chaine ayant un format à base de délimiteurs (car ton exemple semble être un format à base de virgules, d'où l'ambigüité de ta question) ? Exemple : supprimer le second token de la chaine "il, fait, beau", pour la transformer en "il, beau".

    Précise ta question, c'est trop vague.

  6. #26
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 54
    Par défaut
    merci jeroman c'est precisement au 2eme cas que je m'interesse il,fait,beau
    une methode de le rendre il,beau ou il,fait c'est a dire supprimer une sous chaine quelque soit la position du mot

  7. #27
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Tu peux par exemple créer une fonction ayant un prototype
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int SupprimerToken(char * chaine , char * delimiteur , int token_a_supprimer)
    Le premier argument est la chaine à modifier. Le second correspond à une chaine contenant le délimiteur. Le troisième indique le nième token à supprimer. La fonction retourne 1 si elle réussit, et 0 si elle échoue.

    Tu créées un buffer (tableau local) de la taille de ta chaine (+1 pour le '\0'), en initialisant son premier élément avec '\0'.
    Tu créées une boucle, dans laquelle tu utilises strtok (qui travaillera sur ta chaine) pour obtenir le token courant. Si le numéro du token courant ne correspond pas à celui à supprimer, tu concatènes ton buffer avec le token, suivi du délimiteur utilisé.
    La sortie de boucle se fait lorsque strtok renvoie NULL.

    Une fois sorti de boucle :
    * Si le dernier caractère du buffer est le délimiteur, tu le remplaces par '\0'.
    * Tu copies ton buffer vers ta chaine.
    * Si le token à supprimer a été trouvé, la fonction renvoie 1. Sinon 0.

  8. #28
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    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 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par jeroman Voir le message
    Tu peux par exemple créer une fonction ayant un prototype
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int SupprimerToken(char * chaine , char * delimiteur , int token_a_supprimer)
    Le premier argument est la chaine à modifier. Le second correspond à une chaine contenant le délimiteur. Le troisième indique le nième token à supprimer. La fonction retourne 1 si elle réussit, et 0 si elle échoue.

    Tu créées un buffer (tableau local) de la taille de ta chaine (+1 pour le '\0'), en initialisant son premier élément avec '\0'.
    Tu créées une boucle, dans laquelle tu utilises strtok (qui travaillera sur ta chaine) pour obtenir le token courant.
    Utiliser strtok() dans une fonction dont on ne sait pas où ni comment elle sera appelée ?
    Que se passe-t-il si la fonction SupprimerToken() est utilisée dans une boucle dans laquelle il y a, pour une raison qu'on ne connait pas mais qui peut exister, aussi un appel à strtok() ? Les deux appels strtok() entreront en collision (cause variable statique unique dans la librairie).
    Personnellement je préconiserais d'utiliser strtok_r()...
    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]

  9. #29
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 54
    Par défaut
    comment se fait il que le token a supprimer est un int alors que ce que je veux supprimer est un char???

  10. #30
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 54
    Par défaut
    voila un code que j'ai trouver j'ai essayer de le mettre dans un petit main pour tester mais ca plante je pense car il ya beaucoup trop de boucles a mon avis




    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
        #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
     
     
     
     
     
    char *RemplacerFragment (char *source, const char *vieux, const char *nouveau)
    {
      char *original = source;
      char temp[256];
      int ancienne_long = strlen (vieux);
      int i, j, k, place = -1;
     
      for (i = 0; source[i] && (place == -1); ++i)
      {
        for (j = i, k = 0; source[j] == vieux[k]; j++, k++)
        {
          if (!vieux[k+1])
          {
            place = i;
          }
        }
      }
      if (place != -1)
      {
        for (j=0; j<place; j++)
        {
          temp[j] = source[j];
        }
        for (i=0; nouveau[i]; i++, j++)
        {
          temp[j] = nouveau[i];
        }
        for (k = place + ancienne_long; source[k]; k++, j++)
        {
          temp[j] = source[k];
        }
        temp[j] = 0;
        for (i=0; source[i] = temp[i]; i++)
        {
        }
      }
      return original;
    } 
     
    main()
    {
    char*original="claude,pierre,luc";
    const char *hand;char*nouveau;
    nouveau=RemplacerFragment (original,pierre,'void');
    printf("%s",nouveau);
     
    getch();}

  11. #31
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    comment se fait il que le token a supprimer est un int alors que ce que je veux supprimer est un char???
    Car on doit pas parler le même langage...

    Je t'avais demandé :
    Le problème, c'est que, posée comme cela, la question n'a pas de réponse universelle. Ce que je veux dire par là, c'est qu'il faut être plus précis sur la manière dont tu veux supprimer un mot d'une chaine.
    Deux options :

    Est-ce que tu veux supprimer de la chaine un mot donné ? Autrement dit, rechercher une sous-chaîne dans la chaine, et la supprimer. Par exemple, supprimer la sous-chaîne "fait" de la chaîne "il fait beau", pour la transformer en "il beau" ?

    Ou bien est-ce que tu veux supprimer le nième mot d'une chaine ayant un format à base de délimiteurs (car ton exemple semble être un format à base de virgules, d'où l'ambigüité de ta question) ? Exemple : supprimer le second token de la chaine "il, fait, beau", pour la transformer en "il, beau".
    Et tu m'as répondu :
    merci jeroman c'est precisement au 2eme cas que je m'interesse il,fait,beau
    une methode de le rendre il,beau ou il,fait c'est a dire supprimer une sous chaine quelque soit la position du mot
    Vu ta réponse de 21h35, tu cherches finalement un code répondant à l'option 1 et non l'option 2...

    Si j'ai bien insisté sur le terme de délimiteur, ce n'était pas un hasard. D'où ma question, pour que tu donnes des précisions. On ne peut pas deviner si tu veux supprimer un token d'une chaine qui comporte des délimiteurs ou juste une sous-chaîne.

  12. #32
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2011
    Messages : 54
    Par défaut
    en reponse @jeroman le principe que je veux adopter est simple mettre des virgules pour utiliser strtok comparer la chaine entree au retour de strtok si ils sont egaux il va concatener la chaine d'avant et celle d'apres sinon il va concatener la chaine courante avec la suivante c'est sur quoi je tente des trucs maintenant la chaine que je vais entre va donc etre un tableau de char auquel on va calculer le nombre d'element avec strlen concretement je vais essayer d'ecrire quelquchose de ce type

    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
     
    int Supprimer(char *  chaine,char l_element)
    {int i ,n;
     
     char * c;
     c=NULL;
     n=strlen(chaine);
    char T[n];
    if (chaine=NULL) return 0;
    else
    {
     for (i=0;i<n;i++)
     {
        if (strtok_r(chaine,",")!=NULL && (strcmp(l_element,strtok_r(chaine,","))!=0)
                    { 
                         strcpy(T[i],strtok_r(chaine,","));
                               c=strcat(T[i],",T[i+1]");
                     }
       else 
       {
                 if  ( strcmp(l_element,strtok_r(chaine,",")=0)
                       c= strcat (T[i-1],",T[i+1]");
        )
     
     
        }printf("%s",c);
     
    }return 1;
    }
    est ce correct ??j'ai de gros doutes surtout qu'il ya plein d'erreurs de compilation.

Discussions similaires

  1. probleme avec les fichier jar
    Par maind5or dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 14/05/2007, 14h50
  2. Probleme avec les fichiers XML
    Par fle7a dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 17/07/2006, 10h32
  3. Probleme avec les fichier openGL32.dll et glu32.dll
    Par gazzall17 dans le forum OpenGL
    Réponses: 4
    Dernier message: 16/03/2006, 12h10
  4. Probleme avec les fichier faire un copier coller
    Par mcdonald dans le forum Général Python
    Réponses: 4
    Dernier message: 29/01/2006, 13h38
  5. [VB.NET] Probleme avec les fichiers!!
    Par ludovic85 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 20/01/2005, 17h12

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