Como ler um arquivo de strings separadas por tabulação em linguagem C

1. Como ler um arquivo de strings separadas por tabulação em linguagem C

Gordon Freeman
GordonFreeman

(usa Ubuntu)

Enviado em 05/04/2012 - 11:11h

Pessoal tudo bem ?
Estou com uma dúvida aqui, já trabalhei com arquivos em c mas somente manipulação de inteiros .Meu problema é o seguinte, tenho que ler um arquivo txt de registros , estes estão separados por tabulação , a primeira linha do arquico é do tipo : 1 00002house.info 2 0009bo70.com 3 000fp502pfls0kox7.com , esses registros que começam pelo numero , estão na mesma linha e separados por tabulação , o arquivo tem várias linhas.Fiz um código para leitura mas ele só imprime o primeiro registro , ou seja ,não está lendo depois do tab .Segue o link para baixar o arquivo txt que estou usando para leitura : http://www.4shared.com/office/IykWLNTL/dados.html



#include<stdio.h>
#include<stdlib.h>
#include<string.h>

FILE*arquivo;
char string[80];

int main()
{
arquivo=fopen("dados.txt","r");
fgets(string, 79, arquivo);
printf("%s\n",string);
system("pause");
}




  


2. Re: Como ler um arquivo de strings separadas por tabulação em linguagem C

Rafael Sampaio
9u31220

(usa Linux Mint)

Enviado em 05/04/2012 - 11:44h

Não tem nada de errado, a função fgets captura a string até n-1 ou até alcançar um caracter nova linha (veja man fgets).
Se você pretendia pagar várias linhas de uma vez vai precisar de um pouco mais de trabalho.

vlw


3. Re: Como ler um arquivo de strings separadas por tabulação em linguagem C

Gordon Freeman
GordonFreeman

(usa Ubuntu)

Enviado em 05/04/2012 - 14:23h

9u31220 escreveu:

Não tem nada de errado, a função fgets captura a string até n-1 ou até alcançar um caracter nova linha (veja man fgets).
Se você pretendia pagar várias linhas de uma vez vai precisar de um pouco mais de trabalho.

vlw


Obrigado pela ajuda !!! Então, a função está correta mesmo mas devido à inserção do tab no arquivo txt não consigo imprimir os demais registros, o progrma imprime o primeiro registro corretamente e quando encontra o tab ele para , não passa para o segundo e assim por diante.Os registros estão dispostos em linhas, cada linha tem vários registros e ao fim de um linha os próximos registros continuam na outra linh e assim por diante, como um texto mesmo.Veja um exemplo da disaposição dos registros por linha : 1 00002house.info 2 0009bo70.com 3 000fp502pfls0kox7.com ...

O programa imprime somente o registro 1 00002house.info não passa para o registro 2 devido a existência do tab entre eles.


4. Re: Como ler um arquivo de strings separadas por tabulação em linguagem C

Rafael Sampaio
9u31220

(usa Linux Mint)

Enviado em 05/04/2012 - 18:36h

Até onde eu sei a função lê tab como qualquer outro caracter, ela só pára quando encontra o newline.
O arquivo que você disponibilizou tem só um registro por linha do tipo "1 00002house.info;n" onde ;n pode existir ou não. Eu testei aqui ele só imprimiu a primeira linha.


5. Re: Como ler um arquivo de strings separadas por tabulação em linguagem C

Gordon Freeman
GordonFreeman

(usa Ubuntu)

Enviado em 05/04/2012 - 21:54h

9u31220 escreveu:

Até onde eu sei a função lê tab como qualquer outro caracter, ela só pára quando encontra o newline.
O arquivo que você disponibilizou tem só um registro por linha do tipo "1 00002house.info;n" onde ;n pode existir ou não. Eu testei aqui ele só imprimiu a primeira linha.


Obrigado pela juda !!! no arquivo existem vários registros por linha : "1 00002house.info " "2 0009bo70.com" "3 000fp502pfls0kox7.com " , só que estão separados por tab o "1 00002house.info " é o primeiro registro, o "2 0009bo70.com " é o segundo e assim por diante, mas ele só imprime o primeiro (1 00002house.info)e não passa para o segundo registro como vc disse.



6. Re: Como ler um arquivo de strings separadas por tabulação em linguagem C

Rafael Sampaio
9u31220

(usa Linux Mint)

Enviado em 05/04/2012 - 22:10h

Eu acho que você não está falando do mesmo arquivo que eu, por que aquele que você disponibilizou está assim:




1 00002house.info
2 0009bo70.com
3 000fp502pfls0kox7.com;1
4 000icbz392.com;1
5 000online.com
6 001atomicsites.com
7 001dxz1p.com
8 002030907002.info
9 002marketing.com
10 0034qdre.com
11 003cb83dtq7g4ttxki9n.com.ve
12 003j2m0s.com
13 003marketing.com
14 004marketing.com
15 005marketing.com
.
.
.

e até o final apenas um registro por linha.


7. Re: Como ler um arquivo de strings separadas por tabulação em linguagem C

Gordon Freeman
GordonFreeman

(usa Ubuntu)

Enviado em 05/04/2012 - 23:29h

9u31220 escreveu:

Eu acho que você não está falando do mesmo arquivo que eu, por que aquele que você disponibilizou está assim:




1 00002house.info
2 0009bo70.com
3 000fp502pfls0kox7.com;1
4 000icbz392.com;1
5 000online.com
6 001atomicsites.com
7 001dxz1p.com
8 002030907002.info
9 002marketing.com
10 0034qdre.com
11 003cb83dtq7g4ttxki9n.com.ve
12 003j2m0s.com
13 003marketing.com
14 004marketing.com
15 005marketing.com
.
.
.

e até o final apenas um registro por linha.


Uê, estranho, o que baixei agora não está em coluna não rsrrs, estão todos em linhas.Alias a função do Tab é justamente fazer os registros ficarem em linha após linha , para não ter criar somente uma coluna pois esse arquivo na verdade tem 213477 registros ,oque mandei foi só um pedaço, imagina isso em coluna, acho que vc deve estar abrindo no Notpad++ ou outro editor aí ele já reconhece o tab automaticamente e passa para outra linha, mas no notepad vc vai ver todos os registros em linha após linha, se o arquivo estivesse em um única coluna não haveria problema de leitura, o problema existe justamente porque no arquivo txt os registros estão separados por Tab.


8. Re: Como ler um arquivo de strings separadas por tabulação em linguagem C

Gordon Freeman
GordonFreeman

(usa Ubuntu)

Enviado em 05/04/2012 - 23:45h

Consegui agora a pouco resolver o problema , na verdade li na net o tutorial do Osmar , que faço questão de dar o crédito :http://www.arquivodecodigos.net/dicas/c-lendo-o-conteudo-de-um-arquivo-uma-linha-de-cada-vez-2280.html

O programa lê o arquivo linha por linha e imprime em uma única coluna.

#include <stdio.h>
#include <stdlib.h>

const int TAM_BUFFER = 1000; // quantidade de caracteres
// a serem lidos no buffer de cada vez

int main(int argc, char *argv[])
{
char *string[4];
int num [5];
int i,j;


FILE *arquivo = fopen("dados.txt", "r");
char buffer[TAM_BUFFER];

// testa se o arquivo foi aberto com sucesso
if(arquivo != NULL){

// vamos usar um laço para ler o conteúdo do arquivo
// e armazenar no buffer
while(fgets(buffer, TAM_BUFFER, arquivo))
{

printf("%s\n", buffer);
}

fclose(arquivo); // libera o ponteiro para o arquivo
}
else
printf("Nao foi possivel abrir o arquivo.");

return 0;
}



Já testei e está ok, mas agora me veio outro problema, tenho que armazenar esses registros em um vetor de String para manipula-los dentro do programa.Alguma sugestão ? estou completamente perdido rsrsr.


9. Re: Como ler um arquivo de strings separadas por tabulação em linguagem C

Rafael Sampaio
9u31220

(usa Linux Mint)

Enviado em 06/04/2012 - 13:16h

Vou falar pela última vez, se eu não me fiz entender direito por favor alguém do VOl com mais didática que eu tenha a vontade de explicar.

Eu abri o arquivo com o gedit.

O tab não causa a quebra de linha em nenhum editor que eu conheço.

O arquivo que você enviou só possui um registro por linha mesmo.

A função fgets NÃO PÁRA A CAPTURA COM O TAB.

O programa funciona conforme o esperado.

Não sei como armazenar as entradas em um vetor de strings.









Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts