#include<stdio.h> #include<stdlib.h> #include<string.h> int main(int argc , char * argv[]) { FILE * pfile_matrice; FILE * pfile_nb_libs; FILE * pfile_gsm; FILE * pfile; FILE * pfile_nb_tags; FILE * pfile_libs; FILE * pfile_tag; int i ,freq, nb_libs, nb_tags, num_tag, num_lib, j; int ** frequences; char buffer_nom_lib[10]; char compare[10]; char * commande; char buffer_sequence[18]; if (argc != 2 ) { printf("il manque le nom du fichier à traiter!\n"); exit(1); } //allocation de mémoire et initialisation des variables commande = (char *)malloc(100 * sizeof(char)); strcpy(compare , ""); num_lib = 0; num_tag = 0; j = 0; nb_libs= 0; //ouverture des fichiers pfile = fopen(argv[1], "rb"); pfile_libs = fopen("noms_libs.txt","w+"); pfile_matrice = fopen("matrice.txt","w+"); fprintf(pfile_matrice, "Tag_sequence " ) ; //impression de l'entete //récupération du nombre de tags et du nombre des librairies pfile_nb_tags = fopen("nb_tags.txt", "rb"); fscanf(pfile_nb_tags, "%d", &nb_tags); fclose(pfile_nb_tags); pfile_nb_libs = fopen("nb_libs.txt", "rb"); fscanf(pfile_nb_libs, "%d", &nb_libs); fclose(pfile_nb_libs); //allocation de mémoire pour tableau d'entiers de dimension 2 qui va contenir la matrice frequences = (int ** )malloc(nb_libs*sizeof(int *)); for (i =0; i <nb_libs; i++) { frequences[i] = (int *) malloc (nb_tags*sizeof(int)); } //parcours du fichier de manière à reconnaitre les diffèrentes librairies while(!feof(pfile)) { fscanf(pfile, "%s", buffer_nom_lib); fscanf(pfile, "%s " ,buffer_sequence); fscanf(pfile, "%d" ,&freq); //isolement de chaque librairies if(strcmp(buffer_nom_lib, compare)) { memset(commande,0,100); num_lib++; //recuperation des noms de lib et de leurs indices dans le fichiers noms_libs.txt fprintf(pfile_libs, "_%d ----> %s\n", num_lib, buffer_nom_lib); if( num_lib == nb_libs ) fprintf(pfile_matrice, "_%d\n", num_lib ); else fprintf(pfile_matrice, "_%d ", num_lib ); //recuperation d'un sous fichier contenant tous les tags se trouvant dans la librairies strcpy(commande, "grep -w "); strcat(commande, buffer_nom_lib); strcat(commande, " fichier.txt > gsm.txt"); system(commande); //appel systeme de la commande grep : grep -w nom_lib fichier.txt > gsm.txt //initialisation de la ligne du tableau correspondant a la librairie à 0, cela permet d'avoir une frequence nulle pour les tags qui ne se trouvent pas dans la librairie for(i = 0 ; i< nb_tags; i ++) { frequences[num_lib-1][i]= 0; } //ouverture du sous fichier et remplissage de la ligne du tableau corrspondant à la librairies pfile_gsm = fopen("gsm.txt", "rb"); while(!feof(pfile_gsm)) { fscanf(pfile_gsm,"%s", buffer_nom_lib); fscanf(pfile_gsm,"%d", &num_tag); fscanf(pfile_gsm,"%d", &freq); frequences[num_lib-1][num_tag-1] = freq; } fclose(pfile_gsm); } memset(compare, 0, 10); strcpy(compare, buffer_nom_lib) ; } //affichage du nb de lib et de tags printf("nb_libs : %d\n", nb_libs); printf("nb_tags : %d\n", nb_tags); // ecriture du tableau dans le fichier matrice.txt pfile_tag = fopen("tag.txt", "rb"); for(i = 0; i < nb_tags; i ++) { fscanf(pfile_tag, "%s", buffer_sequence); fprintf(pfile_matrice, "%s ", buffer_sequence); for(j = 0; j < nb_libs-1; j++) { fprintf(pfile_matrice,"%d ", frequences[j][i] ); } fprintf(pfile_matrice,"%d\n", frequences[nb_libs-1][i] ); } //fermeture des fichiers et liberation de la mémoire fclose(pfile_matrice); fclose(pfile); fclose(pfile_libs); fclose(pfile_tag); for (i= 0 ; i < nb_libs; i++) {free(frequences[i]);} free(frequences); }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionawk '{ lib[$2]; tag[$1]; c[$2,$1] = $3 } END { printf "etiquettes " for (j in tag ) printf " %s", j print "" for (i in lib) { printf "%s", i for (j in tag) { printf " %d", c[i,j] } print "" } }' ./sample.txt
#include <stdio.h> typedef struct { char **array; int size; int allocSize; } ARR; int findOrAddArray(char *item, ARR *arr) { int i, k; int g 0, d arr->size-1; while ( g <= d ) { i = (g+d)/2; k = strcmp(item, arr->array[i]); if ( k == 0 ) return i; if ( k < 0 ) d = i-1; else g = i+1; } i = g; char ** p; if ( arr->size == 0 ) { p = (char **) malloc(sizeof(char *)*arr->allocSize); p[0] = malloc(strlen(item)+1); strcpy(p[0], item); arr->array = p; } else if ( arr->size == arr->allocSize ) { arr->allocSize *= 2; p = (char **) malloc(sizeof(char *)*arr->allocSize); if ( i > 0 ) memcpy(p, arr->array, sizeof(char *)*i); p[i] = malloc(strlen(item)+1); strcpy(p[i], item); if ( i < arr->size ) memcpy(&p[i+1], &arr->array[i], sizeof(char *)*(arr->size-i)); free(arr->array); arr->array = p; } else { p = (char **) malloc(sizeof(char *)*arr->allocSize); if ( i > 0 ) memcpy(p, arr->array, sizeof(char *)*i); p[i] = malloc(strlen(item)+1); strcpy(p[i], item); if ( i < arr->size ) memcpy(&p[i+1], &arr->array[i], sizeof(char *)*(arr->size-i)); free(arr->array); arr->array = p; } arr->size++; return i; } main() { FILE *fp, *fpo; ARR tag; ARR gsm; tag.size = 0; tag.allocSize = 2000; gsm.size = 0; gsm.allocSize = 500; char bufTag[512], bufGsm[512]; char prevTag[512]; int freq; int i, j; fp = fopen("sample.txt","r"); fpo = fopen("xxxx", "w"); prevTag[0] = 0; while ( !feof(fp) ) { if ( fscanf(fp, "%s %s %d", bufGsm, bufTag, &freq) == 3 ) { i = findOrAddArray(bufTag, &tag); j = findOrAddArray(bufGsm, &gsm); fprintf(fpo, "%d %d %d\n", i, j, freq); } } fclose(fp); fclose(fpo); int *res = (int*)malloc(tag.size*gsm.size*sizeof(int)); fp = fopen("xxxx","r"); /* temporaire */ while ( !feof(fp) ) { if ( fscanf(fp, "%d %d %d", &i, &j, &freq) == 3 ) { res[i*gsm.size+j] = freq; } } fclose(fp); fpo = stdout; fprintf(fpo, "etiquette"); for (j=0; j<gsm.size; j++) { fprintf(fpo, " %s", gsm.array[j]); } fprintf(fpo, "\n"); for (i=0; i<tag.size; i++) { fprintf(fpo, "%s", tag.array[i]); for (j=0; j<gsm.size; j++) { fprintf(fpo, " %d", res[i*gsm.size+j]); } fprintf(fpo, "\n"); } free(res); for (i=0; i<tag.size; i++) free(tag.array[i]); free(tag); for (i=0; i<gsm.size; i++) free(gsm.array[i]); free(gsm); }