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