Beispiel #1
0
// cria um arquivo com as duas listas intercaladas
void intercalaListasPrimario(char *lista1, char *lista2){
	//arquivos a serem manipulados
	FILE *fp1, *fp2, *saida;
	fp1 = fopen(lista1, "r");
	fp2 = fopen(lista2, "r");
	saida = fopen("lista12.txt", "w");
	//indices das listas
	tabelaInd_Prim *CP1 = criaIndicePrimario(lista1);
	tabelaInd_Prim *CP2 = criaIndicePrimario(lista2);
	
	//a partir dos indices une as listas
	int i = 0 , j = 0;
	while (strcmp(CP1->vet_ind[i].key, FIM_IND) != 0 && strcmp(CP2->vet_ind[j].key, FIM_IND) != 0) {
		if(strcmp(CP1->vet_ind[i].key, CP2->vet_ind[j].key) < 0){
			fprintf(saida, "%s\n", getRegistroPrimario(fp1, CP1->vet_ind[i].byte_offset));
			i++;
		}
		else if(strcmp(CP2->vet_ind[j].key, CP1->vet_ind[i].key) < 0){
			fprintf(saida, "%s\n", getRegistroPrimario(fp2, CP2->vet_ind[j].byte_offset));
			j++;
		}
		else{
			fprintf(saida, "%s\n", getRegistroPrimario(fp2, CP2->vet_ind[j].byte_offset));
			i++; j++;
		}
	}
	// se algum dos dois não  chegou ao fim...
	if(strcmp(CP1->vet_ind[i].key, FIM_IND) == 0){
		while(strcmp(CP2->vet_ind[j].key, FIM_IND) != 0){
			fprintf(saida, "%s\n", getRegistroPrimario(fp2, CP2->vet_ind[j].byte_offset));
			j++;
		}
	} 
	else if(strcmp(CP2->vet_ind[j].key, FIM_IND) == 0){
		while(strcmp(CP1->vet_ind[i].key, FIM_IND) != 0){
			fprintf(saida, "%s\n", getRegistroPrimario(fp1, CP1->vet_ind[i].byte_offset));
			i++;
		}
	}

	fclose(fp1);
	fclose(fp2);
	fclose(saida);
	free(CP1);
	free(CP2);
}
Beispiel #2
0
int main(int argc, char** argv) {
    
    int tamTotal, i;
    tamTotal = QUANT_INI;
    
    liPrimCod *primCod[tamTotal];
    for (i=0; i<tamTotal; i++){
        primCod[i] = (liPrimCod*) malloc(sizeof(liPrimCod));
    }
    
    tsecNome *secNome[tamTotal];
    for (i=0; i<tamTotal; i++){
        secNome[i] = (tsecNome*) malloc(sizeof(tsecNome));
    }
    
    tsecCurso *secCurso[tamTotal];
    for (i=0; i<tamTotal; i++){
        secCurso[i] = (tsecCurso*) malloc(sizeof(tsecCurso));
    }
    
//    char *listaNomes[tamTotal];
//    for (i=0; i<tamTotal; i++){
//        listaNomes[i] = (char*) malloc(sizeof(char)*MAX_REC_SIZE);
//    }
    
    tliNome *liNome[tamTotal];
    for (i=0; i<tamTotal; i++){
        liNome[i] = (tliNome*) malloc(sizeof(tliNome));
    }
    
//    int *chaveSecNome[tamTotal];
//    for (i=0; i<tamTotal; i++){
//        chaveSecNome[i] = (int*) malloc(sizeof(int));
//    }
    
    importFile("dados.txt");                    //importa dados - ok
    
    criaChavePrimCod(primCod, tamTotal);         //cria chave primaria(CODIGO) - ok
    criaChaveSecNome(primCod, secNome, tamTotal);             //cria chave secundaria(NOTA) - ok
    criaChaveSecCurso(primCod, secCurso, tamTotal);           //cria chave secundaria(CURSO) - ok
    
    
    
//    for (i=0; i<tamTotal; i++){       //imprime sem ordenadar
//        printf("%d  => %d | %d\n", i, indexPrim[i][0], indexPrim[i][1]);
//    }
//    printf("\n--------------------------------------\n");
    
    insertionSort(primCod, tamTotal);                 //ordena chave primaria(codigo) - ok
    criaIndicePrimario(primCod, tamTotal);            //cria arquivo indice primario(ARQUIVO) - ok
    insertionSortNome(secNome, tamTotal);             //ordena chave secundaria(nome) - ok
    insertionSortCurso(secCurso, tamTotal);             //ordena chave secundaria(curso) - ok
   
    criaIndiceSecNome(liNome, secNome, tamTotal);
    
//    criaListaNomes(indexPrim, listaNomes, tamTotal);
//    insertionSortString(listaNomes, tamTotal);
//    criaIndiceSecAluno(chavePrim, listaNomes, chaveSecNome, tamTotal);
    

    
//    criaMatSecAluno(indexSecNome, tamTotal);
    
//    for (i=0; i<tamTotal; i++){       //imprime apos ordenado
//        printf("%d  => %d | %d\n", i, indexPrim[i][0], indexPrim[i][1]);
//    }
    
    
//    FILE *teste;
//    char dado;
    
//    //verifica calculo offset
//    teste = fopen("reg.txt", "r");
//    fseek(teste, 153, 0);
//    dado = getc(teste);
//    printf("%c", dado);
//    dado = getc(teste);
//    printf("%c", dado);
//    dado = getc(teste);
//    printf("%c", dado);
//    dado = getc(teste);
//    printf("%c", dado);
    
    
    return (EXIT_SUCCESS);
}