/* Nome: at-p1.cpp Autor: Hemerson Pistori Descr.: Primeiro passo para implementacao do trabalho AT */ #include "stdio.h" #include "string.h" struct Item { char Nome[30]; char Endereco[50]; char Fone[10]; }; // Cada posicao do vetor seraŽ do tipo Item struct Item V[100]; // Estou fixando o tamanho maximo em 100. Isto eŽ ruim. // Uma saida eŽ ler o arquivo duas vezes, a primeira para // saber quantos registros sao e alocar espaco para o vetor, // a segunda para ler os dados. int TamV; // Quarda o total de registros da base de dados. void le_vetor(char * nome_arquivo); int main(int argc, char **argv) { int i; char NomeArquivo[20]; printf("Qual o nome do arquivo: "); scanf("%s",NomeArquivo); // Usuario entra com o nome do arquivo le_vetor(NomeArquivo); // Esta funcao ira copiar do arquivo para o vetor V // Aqui eu estou apenas testando para ver se o vetor esta OK. for( i = 0 ; i < TamV ; ++i ) { printf("N: %s,E: %s,F: %s\n",V[i].Nome,V[i].Endereco,V[i].Fone); printf("Tecle enter para continuar\n"); flushall(); getchar(); } // Estou usando um codigo parecido com o de cima. O ideal eh criar // uma "funcaozinha" chamada espera, e chama-la sempre que quizermos // que o usuario tecle alguma coisa para continuar. printf("Tecle enter para terminar\n"); flushall(); getchar(); return(0); } void le_vetor(char * nome_arquivo) { FILE * ent; // Esta variavel eŽ usada para representar o arquivo em disco. char c; char temp[50]; // Variavel temporaria para guardar cada campo. int indice; // Ira indicar em que posicao do vetor eu devo inserir o registro int campo; // Ira indicar qual dos 3 campos eu estou lendo. int t; // Indice qual a posicao de temp que esta sendo lida. ent = fopen(nome_arquivo,"r"); // Abre arquivo com os dados if( ent == NULL) return; // Quando ent eŽ NULL eŽ porque o arquivo esta com // problemas. O usuario pode ter digitado o nome errado. indice = 0; // Comeco inserir na primeira posicao do vetor (posicao 0 em C) campo = 0; t = 0; while( (c=fgetc(ent)) != EOF ) // Enquanto nao chegar ao fim do arquivo. { if( c == ';' || c == '\n') { temp[t] = '\0'; // Fecho a string que estaŽ em temp. if( campo == 0 ) { strcpy(V[indice].Nome,temp); } else if( campo == 1 ) { strcpy(V[indice].Endereco,temp); } else if( campo == 2 ) { strcpy(V[indice].Fone,temp); } strcpy(temp,""); // Depois de copiar o campo para o vetor eu tenho // limpar a variavel temp para comecar a ler // o novo campo. t = 0; ++ campo; if( campo > 2) campo = 0; // Campo pode ser 0,1 ou 2. if( c== '\n' ) { ++indice; // Leu um salto de linha, por isto tenho que passar para // a proxima posicao do vetor. } } else { temp[t] = c; // Apenas copia o caracter lido para temp. ++t; } } TamV = indice; fclose(ent); // Fecha o arquivo depois de ter lido para a memoria }