Mardi 25 août 2009 à 15:04:24
mais si le but est de t'en servir dans ton soft, pourquoi passer par un fichier ? pourquoi ne pas garder ces résultats en mémoire ?
en gros, tu as déjà tout ce qu'il faut pour savoir lire les infos dans _concepts.
c'est un bête tableau.
chaque cellule de ce tableau représente un <concept> dans ton fichier XML
cette structure permet entre autre de conserver tous les attribute_ref de tes balises
typedef struct REF { char* reference; // la donnée proprement dite //void* next; struct REF* next; // pointeur vers la reference suivante (ou 0 s'il n'y a plus de donnée) }REF; // Structure décrivant les <Concept> typedef struct { char* ID; // Valeur de l'Id REF* intent; // Liste des de l' REF* upperCovers; // Liste des <Concept_Ref> de l' REF* extent; // Liste des <Object_Ref> de l'<extent> } CONCEPT ;
void DisplayConceptInfos(int index, int showExtent, FILE *fp) { REF* ref; // On valide la valeur de l'index if (index>=0 && index<_countCpt) { if (showExtent) { ref = _concepts[index].extent; if (ref) { while (ref) { if (ref->reference) fprintf(fp,"%s ", ref->reference); ref = ref->next; } fprintf(fp,": "); } } ref = _concepts[index].intent; if (_concepts[index].extent && ref) { while (ref) { if (ref->reference) fprintf(fp,"%s ", ref->reference); ref = ref->next; } fprintf(fp,"\n"); } } }
D'après vous, on doit sauvegarder les valeurs de dan un tableau ou bien on peut utiliser directement '_concept ' ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionJe parle d'un bête tableau, ou une liste chainée, peu importe avec une case pour chacun des fichiers analysés.
typedef struct {
char* filename;
CONCEPT* concept;
struct REF* next;
} FichierXML ;
le fichier qui j'ai le crée et qui contient les valeurs de
typedef struct {
char* filename;
CONCEPT* concept;
struct REF* next;
} FichierXML ;
REF* ref=NULL; int i,retsize = 0,p; char **ret = NULL,result[1024]; lire_fichier("input.lat.xml"); for (p=0; p <_countCpt; p++) { ref = _concepts[p].intent; if (_concepts[p].extent && ref) { strcpy(result,"\0"); while (ref) { if (ref->reference) { strcat(result,ref->reference); strcat(result," "); ref = ref->next; } } ret = xrealloc(ret, (++retsize) * sizeof(char*)); /* On alloue une case de plus au tableau de string, puis on ajoute la chaine à la fin du tableau */ ret[retsize-1] = mstrndup(result, strlen(result)); } } ret = xrealloc(ret, (++retsize) * sizeof(char*)); /* On ajoute un dernier pointeur sur NULL pour savoir quand le tableau se termine */ ret[retsize-1] = NULL; }
<Extent> <Object_Ref>40787</Object_Ref> <Object_Ref>14756</Object_Ref> <Object_Ref>4771</Object_Ref> <Object_Ref>4826</Object_Ref> </Extent> a b cc
result[0] = 0; while (ref) { if (ref->reference) { if (result[0]) strcat(result," "); strcat(result,ref->reference); ref = ref->next; } }
result[0] = 0; while (ref) { if (ref->reference) { if (result[0]) strcat(result," "); strcat(result,ref->reference); ref = ref->next; } }
<Extent> <Object_Ref>40787</Object_Ref> <Object_Ref>14756</Object_Ref> <Object_Ref>4771</Object_Ref> <Object_Ref>4826</Object_Ref> </Extent> a b cc
strcpy(result,"\0"); while (ref) { if (ref->reference) { strcat(result,ref->reference); strcat(result," "); ref = ref->next; } }
lire_fichier("input.lat.xml"); for (p=0; p <_countCpt; p++) { ref = _concepts[p].intent; if (_concepts[p].extent && ref) { result[0] = 0; while (ref) { if (ref->reference) { if (result[0]) strcat(result," "); strcat(result,ref->reference); ref = ref->next; } } } }
Est ce 'strcat' ajoute un espace par défaut ?
ret = xrealloc(ret, (++retsize) * sizeof(char*)); /* On alloue une case de plus au tableau de string, puis on ajoute la chaine à la fin du tableau */ ret[retsize-1] = mstrndup(result, strlen(result)); } } ret = xrealloc(ret, (++retsize) * sizeof(char*)); /* On ajoute un dernier pointeur sur NULL pour savoir quand le tableau se termine */ ret[retsize-1] = NULL; }