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

GTK+ avec C & C++ Discussion :

probleme avec getline


Sujet :

GTK+ avec C & C++

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 302
    Par défaut probleme avec getline
    bonjour, j'ai un gros probleme pour enregistrer un texte, je cherche a ouvrir un memo en lecture s'il n'existe pas je l'ouvre en écriture et je lui mets ce qui m'interresse par contre s'il existe je souhaite le parcourir ligne par ligne comparer avec une chaine de caractere si ce n'est pas la meme je continue et si c'est la meme j'enregistre quelque chose
    j'ai utiliser pour ca un getline mais gtk me met "undefined reference" donc je pense que c'est mort il faut que je pense a faire autre chose mais je ne vois pas quoi
    voici ma fonction pouvez vous m'aider s'il vous plait, je dois rendre mon devoir demain matin et il n'y a plus que ca qui bloque:
    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
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
     
    /*fonction du bouton enregistrer*/
    void on_button5_clicked(GtkButton *button,gpointer user_data)
    {
      /*déclaration des variables utiles pour récupérer la note*/
      /*déclaration pour le buffer*/
      GtkTextBuffer* text_buffer=0;
      GtkTextIter start;
      GtkTextIter end;
      gchar* buffer;
      /*variable pour l'intitulé*/
      const gchar *entrer;
      /*variable pour les fenêtres d'erreur et de confirmation*/
      GtkWidget* pconfirmation;
      GtkWidget* perreur;
      GtkWidget* perreur1;
      /*permet d'appeller la structure*/
      text_st    * p_st   = user_data;
      /*variable pour récupérer ce qui se trouve dans les comboboxentry*/
      const gchar *jour;
      const gchar *mois;
      const gchar *annee;
      const gchar *heured;
      const gchar *minutesd;
      const gchar *heuref;
      const gchar *minutesf;
      int nbred = 0;
      int nbref = 0;
      int mind=0;
      int nbret=0;
      int moisd=0;
      int moisff=0;
      int comp1=0;
      int anneed=0;
      int anneeff=0;
      int jourd=0;
      int jourff=0;
      const gchar *repet2;
      const gchar *repet3;
      const gchar *jourf;
      const gchar *moisf;
      const gchar *anneef;
      /*déclaration de tableaux servant à l'affichage*/
      char tab1[3];
      char tab2[3];
      char tab3[4];
      char tab4[3];
      /*initialisation du 3 caractere du tableau*/
      tab1[2]='\0';
      tab2[2]='\0';
      tab3[3]='\0';
      tab4[2]='\0';
      /*déclaration d'un pointeur de fichier mémo contient l'enregistrement complet de la fenêtre*/
     // FILE *memo;  
      /*déclaration d'un pointeur de fichier mémo1 contient que la date de début de rendez vous (servira pour vérifier la disponibilité*/
      FILE *memo1; 
      /*déclaration d'un pointeur de fichier mémoori pour le fichier d'origine*/
      FILE *memoori; 
     
      char * line = NULL;
            size_t len = 0;
            ssize_t read;
     
     /*entier qui va servir a la comparaison*/ 
      int comp2 = 0;
      const gchar *mot1="END:VCALENDAR";
     
     
     
     
     
      /*On récupére ce que l'utilisateur a rentré*/                                        
      entrer=gtk_entry_get_text(GTK_ENTRY(p_st->entry1));
      //On recupere le buffer et on le met dans une variable
      text_buffer=gtk_text_view_get_buffer(GTK_TEXT_VIEW(p_st->textview1));
      //On recupere l'origine du buffer
      gtk_text_buffer_get_start_iter(text_buffer,&start);
      //On recupere la fin du buffer
      gtk_text_buffer_get_end_iter(text_buffer,&end);
      /*on copie le contenu du buffer dans une variable*/
      buffer = gtk_text_buffer_get_text(text_buffer, &start, &end, TRUE);
      /*récupéation du jour*/
      jour=gtk_entry_get_text(GTK_ENTRY (GTK_BIN (p_st->comboboxentry1)->child));
      /*on transcrit  le jour en un nombre entier*/
      jourd = (int) strtol (jour, NULL,0);
      /*récupération du mois*/
      mois=gtk_entry_get_text(GTK_ENTRY (GTK_BIN (p_st->comboboxentry2)->child));
      /*on transcrit  le mois en un nombre entier*/
      moisd = (int) strtol (mois, NULL,0);
      /*récupération de l'année*/
      annee=gtk_entry_get_text(GTK_ENTRY (GTK_BIN (p_st->comboboxentry3)->child));
      /*on transcrit  l'annee en un nombre entier*/
      anneed = (int) strtol (annee, NULL,0);
      /*récupération de l'heure de début*/
      heured=gtk_entry_get_text(GTK_ENTRY (GTK_BIN (p_st->comboboxentry4)->child));
      /*récupération des minutes de début*/
      minutesd=gtk_entry_get_text(GTK_ENTRY (GTK_BIN (p_st->comboboxentry5)->child));
      /*on transcrit la chaine en un nombre pour l'heure de début et on lui sosustrait 1 pour l'enregistrer sous la forme demandée*/
      nbred = (int) strtol (heured, NULL,0);
      nbred=nbred-1;
      /*récupération de l'heure de fin*/
      heuref=gtk_entry_get_text(GTK_ENTRY (GTK_BIN (p_st->comboboxentry8)->child));
      /*récupération des minutes de fin*/
      minutesf=gtk_entry_get_text(GTK_ENTRY (GTK_BIN (p_st->comboboxentry7)->child));
      /*on transcrit la chaine en un nombre pour l'heure de fin et on lui sosustrait 1 pour l'enregistrer sous la forme demandée*/
      nbref = (int) strtol (heuref, NULL,0);
      nbref=nbref-1;
      /*récupération des repetitions*/
      repet2=gtk_entry_get_text(GTK_ENTRY (GTK_BIN (p_st->comboboxentry10)->child));
      /*récupération des repetitions*/
      repet3=gtk_entry_get_text(GTK_ENTRY (GTK_BIN (p_st->comboboxentry11)->child));
      /*récupéation du jour* pour la répétition*/
      jourf=gtk_entry_get_text(GTK_ENTRY (GTK_BIN (p_st->comboboxentry14)->child));
      /*on transcrit le jour en un nombre entier*/
      jourff = (int) strtol (jourf, NULL,0);
      /*récupération du mois pour les répétitions*/
      moisf=gtk_entry_get_text(GTK_ENTRY (GTK_BIN (p_st->comboboxentry15)->child));
      /*on transcrit le mois en un nombre entier*/
      moisff = (int) strtol (moisf, NULL,0);
      /*récupération de l'année pour les répétitions*/
      anneef=gtk_entry_get_text(GTK_ENTRY (GTK_BIN (p_st->comboboxentry16)->child));
      /*on transcrit l'annee en un nombre entier*/
      anneeff = (int) strtol (anneef, NULL,0);
     
     
      /*copie les chaines de caracteres dans un tableau*/
      strncpy (tab1, mois, 2);
      strncpy (tab2, moisf, 2);
      strncpy (tab3, repet2, 3);
      strncpy (tab4, repet3, 2);
     
      /*si on remplit les répétitions*/
      if ((strlen(jourf)!=0) && (strlen(moisf)!=0) && (strlen(anneef)!=0)) 
      {
        /* si la date de répétition et la date du rendez-vous ne vont pas ensemble (par exemple l'utilisateur ne peut pas prendre 
        un rendez-vous en 2008 et le répéter jusu'en 2007)*/
        if ((anneeff<anneed) || ((anneeff==anneed) && (moisff<moisd))|| ((anneeff==anneed) && (moisff==moisd) && (jourff<jourd)))
        {
          /*alors on affiche une fenetre d'erreur*/
          perreur1 = gtk_message_dialog_new (NULL,GTK_DIALOG_MODAL,GTK_MESSAGE_ERROR ,GTK_BUTTONS_OK, "la date et/ou l'heure de fin ne corresponde(nt) pas");
          gtk_dialog_run(GTK_DIALOG(perreur1));
          gtk_widget_destroy(perreur1);
        }  
      }  
      /*sinon on vérifie que la date de début, l'heure de début et l'heure de fin ne sont pas vide et l'intitulé ne sont pas vide ainsi que la date de répétition par rapport à la date du rendez vous*/                    
      else 
      {
        if ((strlen(jour)!=0) && (strlen(mois)!=0) && (strlen(annee)!=0) && (strlen(heured)!=0) && (strlen(minutesd)!=0) && (strlen(heuref)!=0) && (strlen(minutesf)!=0)  &&  (strlen(entrer)!= 0))
        {
          /*alors on enregistre dans le fichier*/
          /*ouverture du fichier d'origine en lecture pour récupérer les donner*/
          memoori=fopen("calend.vcs","r");
          if (memoori==NULL) 
          {
              fclose(memoori);
              memoori=fopen("calend.vcs","a");
              if (memoori==NULL)
              {
              perror("erreur d'ouverture du fichier");
              exit(0);
              }
              fprintf(memoori,"BEGIN:VCALENDAR\n");
              fprintf(memoori,"VERSION:1.0\n");
              fprintf(memoori,"PRODID:PalmDesktop Generated\n");               
              fprintf(memoori, "BEGIN:VEVENT\n");      
              fprintf(memoori,"SUMMARY:");  
              fprintf(memoori,"%s\n",entrer);
              fprintf(memoori,"DESCRIPTION:");
              fprintf(memoori,"%s\n",buffer);
              fprintf(memoori,"DTSTART:");
              fprintf(memoori,"%s%s%sT%d%s00Z\n",annee,tab1,jour,nbred,minutesd);
              fprintf(memoori,"DTEND:");
              fprintf(memoori,"%s%s%sT%d%s00Z\n",annee,tab1,jour,nbref,minutesf);
              fprintf(memoori,"RRULE:");
              fprintf(memoori,"%s",tab3);
              fprintf(memoori," ");
              fprintf(memoori,"%s",tab4);
              fprintf(memoori," ");
              fprintf(memoori,"%s%s%s\n",anneef,tab2,jourf);
              fprintf (memoori, "END:VEVENT\n");
              fprintf(memoori,"END:VCALENDAR");
     
          fclose(memoori);
          }
          else 
          {
          while ((read = getline(&line, &len, memoori)) != -1) 
          comp1=strcmp(read, mot1);
            if(comp1!=0) 
            {
            len++;
            }
            else
            {
            fclose(memoori);
              memoori=fopen("calend.vcs","a");
              if (memoori==NULL)
              {
              perror("erreur d'ouverture du fichier");
              exit(0);
              } 
                fprintf(memoori, "BEGIN:VEVENT\n");      
              fprintf(memoori,"SUMMARY:");  
              fprintf(memoori,"%s\n",entrer);
              fprintf(memoori,"DESCRIPTION:");
              fprintf(memoori,"%s\n",buffer);
              fprintf(memoori,"DTSTART:");
              fprintf(memoori,"%s%s%sT%d%s00Z\n",annee,tab1,jour,nbred,minutesd);
              fprintf(memoori,"DTEND:");
              fprintf(memoori,"%s%s%sT%d%s00Z\n",annee,tab1,jour,nbref,minutesf);
              fprintf(memoori,"RRULE:");
              fprintf(memoori,"%s",tab3);
              fprintf(memoori," ");
              fprintf(memoori,"%s",tab4);
              fprintf(memoori," ");
              fprintf(memoori,"%s%s%s\n",anneef,tab2,jourf);
              fprintf (memoori, "END:VEVENT\n");
              fprintf(memoori,"END:VCALENDAR");
              }
              fclose(memoori);
              }
    else 
        {
          perreur = gtk_message_dialog_new (NULL,GTK_DIALOG_MODAL,GTK_MESSAGE_ERROR ,GTK_BUTTONS_OK, "vous avez oublié de remplir la date de début ou/et l'heure de début ou/et l'heure de fin");
          gtk_dialog_run(GTK_DIALOG(perreur));
          gtk_widget_destroy(perreur);
        }
      }
    }
    pouvez vous me dire comment faire

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 302
    Par défaut probleme d'enregistrement
    j'ai changé un peu le programme j'ai essayé d'utiliser autre chose mon probleme est dans le else quand mon fichier est deja creer je je lui fais lire le fichier si il rencontre end:vcalendar je l'ouvre en écriture et je veux inserer dedans et là ce ne marche pas il ne m'insere rien
    pourquoi? et quel est le remede?
    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
     
     if ((strlen(jour)!=0) && (strlen(mois)!=0) && (strlen(annee)!=0) && (strlen(heured)!=0) && (strlen(minutesd)!=0) && (strlen(heuref)!=0) && (strlen(minutesf)!=0)  &&  (strlen(entrer)!= 0))
        {
          /*alors on enregistre dans le fichier*/
          /*ouverture du fichier d'origine en lecture pour récupérer les donner*/
          memoori=fopen("calend.vcs","r");
          if (memoori==NULL)
          {
            memoori=fopen("calend.vcs","a"); 
            fprintf(memoori,"BEGIN:VCALENDAR\n");
            fprintf(memoori,"VERSION:1.0\n");
            fprintf(memoori,"PRODID:PalmDesktop Generated\n");               
            fprintf(memoori, "BEGIN:VEVENT\n");      
            fprintf(memoori,"SUMMARY:");  
              fprintf(memoori,"%s\n",entrer);
              fprintf(memoori,"DESCRIPTION:");
              fprintf(memoori,"%s\n",buffer);
              fprintf(memoori,"DTSTART:");
              fprintf(memoori,"%s%s%sT%d%s00Z\n",annee,tab1,jour,nbred,minutesd);
              fprintf(memoori,"DTEND:");
              fprintf(memoori,"%s%s%sT%d%s00Z\n",annee,tab1,jour,nbref,minutesf);
              fprintf(memoori,"RRULE:");
              fprintf(memoori,"%s",tab3);
              fprintf(memoori," ");
              fprintf(memoori,"%s",tab4);
              fprintf(memoori," ");
              fprintf(memoori,"%s%s%s\n",anneef,tab2,jourf);
              fprintf (memoori, "END:VEVENT\n");
              fprintf(memoori,"END:VCALENDAR");
          fclose(memoori);
          }
          else 
          {
               /*tant que la fin du fichier n'est pas terminé*/
        while(!feof(memoori))
        {
        fgets(chaine,80,memoori);
        comp2=strcmp(chaine, mot1);
        if(comp2=0) 
        { 
        memoori=fopen("calend.vcs","a");            
        fprintf(memoori, "BEGIN:VEVENT\n");      
        fprintf(memoori,"SUMMARY:");  
        fprintf(memoori,"%s\n",entrer);
        fprintf(memoori,"DESCRIPTION:");
        fprintf(memoori,"%s\n",buffer);
        fprintf(memoori,"DTSTART:");
        fprintf(memoori,"%s%s%sT%d%s00Z\n",annee,tab1,jour,nbred,minutesd);
        fprintf(memoori,"DTEND:");
        fprintf(memoori,"%s%s%sT%d%s00Z\n",annee,tab1,jour,nbref,minutesf);
        fprintf(memoori,"RRULE:");
        fprintf(memoori,"%s",tab3);
        fprintf(memoori," ");
        fprintf(memoori,"%s",tab4);
        fprintf(memoori," ");
        fprintf(memoori,"%s%s%s\n",anneef,tab2,jourf);
        fprintf (memoori, "END:VEVENT\n");
        fprintf(memoori,"END:VCALENDAR");
        }
        }
              fclose(memoori);
              }
    merci

  3. #3
    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 : 48
    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
    getline ? Je crois qu'il faut arrêter de programmer au hasard ! Cette fonction, même si elle existe quelque part, c'est en tout cas pas dans GTK+

    Pour fgets, si la fonction trouve un saut de ligne '\n', elle le rajoute dans la chaîne donc cela fausse évidemment les résultats pour strcmp ! Ce qu'il faut faire, c'est supprimer ce caractère s'il existe et le remplacer par un caractère nul:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    char * p = strchr (chaine, '\n');
     
    if (p != NULL)
    {
       *p = 0;
    }
    Et seulement après tu peux comparer
    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 !

Discussions similaires

  1. Probleme avec getline
    Par Miss.Energie dans le forum C++
    Réponses: 1
    Dernier message: 19/09/2010, 18h03
  2. probleme avec getline
    Par Elstak dans le forum C++
    Réponses: 4
    Dernier message: 06/01/2008, 12h39
  3. Problem avec le getline
    Par alexorcet dans le forum C++
    Réponses: 1
    Dernier message: 01/11/2006, 14h34
  4. [Debutant]Probleme avec getline()
    Par Nerziel dans le forum Débuter
    Réponses: 4
    Dernier message: 15/10/2006, 18h40
  5. probleme avec la fonction std::getline()
    Par jamesleouf dans le forum SL & STL
    Réponses: 6
    Dernier message: 19/03/2006, 13h54

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