Aender 3 Denunciar post Postado Abril 13, 2012 Olá pessoal tudo bem ? estou com uma dúvida aqui.Bom, tenho que ler um arquivo txt que possui 100.000 strings separadas por tabulação e armazenar em um vetor, já fiz o código e está tudo ok mas não consigo ler acima de 20.000, parece que é um erro relativo ao tipo de dados.Para armazenar as strings tenho criar um vetor de caracteres onde a primeira posição corresponde à quantidadede e o segundo comprimento de cada string , mas o programa não lê acima de 20.000, aliás consegui fazer ler até 30.000 alterando o parâmtro comprimento de 100 para 40, mas não entendo porque isso deu certo. #include <stdio.h> #include <stdlib.h> int main() { FILE *arquivo; long max = 20000; //quantidades de registros a serem lidos char vet [max][100]; // Indice 1 : quantidade de registro , indice dois : comprimento das strings int i,count; //===============Código abrir arquivo txt e armazenar registros no vetor=================================== arquivo = fopen("dados20000.txt","r"); //abrindo para leitura arq.txt if(arquivo == NULL) { printf("erro ao ler arquivo!"); } else { count = 0; while(fgets(vet[count], sizeof(vet), arquivo)) //a vetorização ocorre nessa linha { count++; } } fclose(arquivo); /*=============================== Fim Função abrir arquivo==================================*/ for (i=0;i<=count;i++) { printf("Vetor lido %s",vet[i]); } printf("Arquivo lido com Sucesso !!!!\n"); return 0; } Estou deixando o link para baixar os arquivos txt com 20.000 e 100.000 registros .Desde já muito obrigado pessoal. http://www.4shared.com/rar/d0-D68O6/arquivos.html Compartilhar este post Link para o post Compartilhar em outros sites
GBecker 51 Denunciar post Postado Abril 13, 2012 Aender, Você falou que não lê acima de 20000. Mas você percebeu que a tua variável max está inicializada com 20000? Será que não é isso?? Espero ter ajudado, FLW! Compartilhar este post Link para o post Compartilhar em outros sites
guidjos 65 Denunciar post Postado Abril 13, 2012 Aender: 1. De onde vem a função time? 2. Por que a chamada de srand? 3. Por que você passa sizeof vet para fgets? 4. Qual o valor de count se o arquivo não puder ser aberto? Em que isso implica na parte de impressão? 5. Qual a saída encontrada? Sugiro que conserte sua indentação, para que o código fique mais fácil de se analisar. Compartilhar este post Link para o post Compartilhar em outros sites
Aender 3 Denunciar post Postado Abril 14, 2012 Aender: 1. De onde vem a função time? 2. Por que a chamada de srand? 3. Por que você passa sizeof vet para fgets? 4. Qual o valor de count se o arquivo não puder ser aberto? Em que isso implica na parte de impressão? 5. Qual a saída encontrada? Sugiro que conserte sua indentação, para que o código fique mais fácil de se analisar. Obrigado por participar. Bom, time e srand não faz nada na função copiei sem querer, elas são usadas em outra função para gerar números aleatórios.O sizeof vet representa a quantidade de caracteres a serem lidos no buffer de cada vez.Vou ser sincero eu não criei essa função porque não domino muito bem essa parte de arquivos, eu encontrei pesquisando em outro fórum e revolveu parcialmente meu problema.Continuando, count é o indice do vetor que vai receber os registros do arquivo txt, cont e incrementado até a atingir a quantidade de registros lidos .Meu problema está sendo configurar corretamente esse valor de sizeof que não sei exatamente para que serve.Fiz teste aqui até com 30000 registros sizeof 60, a partir disso não lê mais, dá erro e nem executa o programa. Compartilhar este post Link para o post Compartilhar em outros sites