void cleanup() { int i; REF* ref; for (i=0; i<_countCpt; i++) { // On libère donc une a une les zones mémoire allouées free(_concepts[i].ID); // On néttoie ensuite les listes chainées, une à une. ref = _concepts[i].intent; while (ref) { free(ref->reference); ref = ref->next; } ref = _concepts[i].upperCovers; while (ref) { free(ref->reference); ref = ref->next; } ref = _concepts[i].extent; while (ref) { free(ref->reference); ref = ref->next; } } // Avant de désallouer le tableau de Concepts free(_concepts); }
void characters(void* user_data, const xmlChar *ch, int len) { if (_inID && len) { // On va enregistrer l'ID, mais en supprimant les espaces qui semblent s'être introduits 5 while(len>1 && *ch==32) { len--; ch+=sizeof(xmlChar); } // On supprime également les espaces qui suivent la valeur. while(len>1 && *(ch+len-1)==32) len--; _concepts[_currentCpt].ID = (char*)malloc(len+1); strncpy(_concepts[_currentCpt].ID, ch, len); *(_concepts[_currentCpt].ID+len) = 0; _inID = 0; } else if ((_inIntent || _inUpperCovers || _inExtent) && len) { // lien vers les references du concept courant REF** source; REF* ref; REF* newRef; if (_inIntent) source = &(_concepts[_currentCpt].intent); else if (_inUpperCovers) source = &(_concepts[_currentCpt].upperCovers); else if (_inExtent) source = &(_concepts[_currentCpt].extent); ref = *source; // on créé une nouvelle reference newRef = (REF*)calloc(1, sizeof(REF)); // permet de relier la nouvelle reference a la structure (liste chainee) if (ref) { // La liste contient au moins une cellule. // On va parcourir la liste a la recherche de la dernière cellule (celle qui à le pointeur next à NULL) while(ref->next) ref = (REF*)ref->next; ref->next = newRef; } else *source = newRef; // Première cellule de la liste chainée // on recopie la donnée newRef->reference = (char*)malloc(len+1); strncpy(newRef->reference, ch, len); // 0 terminal de la chaine de caractères *(newRef->reference+len) = 0; // Remise à 0 des flags de position _inIntent _inUpperCovers _inExtent = 0; } }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question5 : dd cc aaa
8 : aaa bb dd
10 : bb cc aaa
4 : dd bb cc
257 0.860000
233 1.000000
144 0.880000
377 0.000000
257 0.860000
562 0.000000
456 0.000000
388 0.660000
644 0.000000
277 0.460000
160 1.000000
155 1.000000
160 1.000000
155 1.000000
175 0.000000
185 0.000000
170 0.000000
175 0.000000
174 0.000000
163 0.400000
30 1.000000
32 1.000000
45 1.000000
56 1.000000
46 0.860000
48 0.000000
34 0.000000
38 0.500000
59 0.660000
30 0.000000
257 0.860000
233 1.000000
144 0.880000
377 0.000000
257 0.860000
562 0.000000
456 0.000000
388 0.660000
644 0.000000
277 0.460000
5 : dd cc aaa : 0.00
8 : aaa bb dd : 0.00
10 : bb cc aaa : 0.00
4 : dd bb cc : 0.00
#include <stdlib.h> #include <stdio.h> int readInt(FILE* fp, int *ret) { int i; char sBuffer[32]; for (i=0;i<8;i++) { sBuffer[i] = fgetc(fp); if (sBuffer[i]==32) { sBuffer[i] = 0; *ret = strtol(sBuffer, NULL, 0); return 0; } } *ret = 0; return -1; } double LireDegree(int nLineNumber, char* sFileName) { char sBuffer[32]; FILE* fp; int i=0; if (fp = fopen(sFileName, "r")) { while(--nLineNumber) while (!feof(fp) && fgetc(fp)!=10); while (fgetc(fp)!=32); while(!feof(fp)) { sBuffer[i] = fgetc(fp); if (sBuffer[i]==32 || sBuffer[i]==13) break; i++; } sBuffer[i] = 0; fclose(fp); return strtod(sBuffer, NULL); } return 0.0; } int main() { char sBuffer[32]; FILE *fp, *fp_final; int nLineNumber, i; double nCurDegree, nMinDegree = 0.0; int bFirst=1; int bBreak = 0; fp = fopen("resultat.txt", "r"); fp_final = fopen("resultat_final.txt", "w"); while (!readInt(fp, &nLineNumber)) { fprintf(fp_final, "%d :", nLineNumber); fgetc(fp); i=0; while(!feof(fp)) { sBuffer[i]=fgetc(fp); if (sBuffer[0]==10) break; else if (sBuffer[i]==10 || sBuffer[i]==32 && i!=0) { bBreak = (sBuffer[i]==10); sBuffer[i] = 0; fprintf(fp_final, " %s", sBuffer); sBuffer[i++] = '.'; sBuffer[i++] = 't'; sBuffer[i++] = 'x'; sBuffer[i++] = 't'; sBuffer[i] = '\0'; nCurDegree = LireDegree(nLineNumber, sBuffer); if (nMinDegree>nCurDegree || bFirst) { bFirst = 0; nMinDegree = nCurDegree; } i=0; if (bBreak) break; } else if (sBuffer[0]!=32) i++; } fprintf(fp_final, " : %f\n", nMinDegree); bFirst = 1; } fclose(fp); fclose(fp_final); system("type resultat_final.txt"); system("pause"); }
5 : dd cc aaa : 0.000000
8 : aaa bb dd : 0.500000
10 : bb cc aaa : 0.000000
4 : dd bb : 0.000000
5 : dd cc aaa : 0.00
8 : aaa bb dd : 0.50
10 : bb cc aaa : 0.00
4 : dd bb cc : 0.00
4 : dd bb
4 : dd bb cc
sBuffer[i]==10 || sBuffer[i]==32