Manipulação de arquivo .txt em C [RESOLVIDO]

1. Manipulação de arquivo .txt em C [RESOLVIDO]

Jackson Fernandes Aragão Terceiro
jacksonterceiro

(usa XUbuntu)

Enviado em 04/04/2016 - 15:53h

Iae pessoal, estou com um projeto para desenvolver uma agenda telefônica em C. Porem, (como tudo na vida para te complicar --* ) o projeto tem quer ser feito por socket e é ai que esta o problema. Tenho um arquivo .txt com todos os nomes e telefones cadastrados, mas preciso que o usuario faça uma "pesquisa", digite a primeira letra do nome cadastrado que deseja procurar, e dessa forma ele liste todos os contatos que começam com a letra que o usuario digitou. Por exemplo: LETRA DIGITADA: "J" -> Jackson, João, Joãozinho, Jeremias, Jefferson.


  


2. Re: Manipulação de arquivo .txt em C [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 04/04/2016 - 16:33h

E qual dificuldade você está tendo?


3. RE: Tópico: Manipulação de arquivo .txt em C

Jackson Fernandes Aragão Terceiro
jacksonterceiro

(usa XUbuntu)

Enviado em 04/04/2016 - 17:11h

Eu preciso imprimir no terminal todas as Strings que começa com a letra que o usuário digitou. Como eu faço isso?


4. Re: Manipulação de arquivo .txt em C [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 04/04/2016 - 17:39h

Se eu entregar para você uma página de um jornal, e pedir para marcar todas as palavras que começam com a letra “R”, como você faria? Por acaso não leria palavra por palavra, olhando a primeira letra, e marcaria aquelas em que a primeira letra realmente fosse ”R”?

Pelo que você descreveu, seu programa tem de fazer algo rigorosamente análogo. Se a tarefa de marcar palavras da página de jornal é simples (ainda que seja extremamente tediosa), também será simples a tarefa de busca que o seu programa tem de realizar.


5. Re: Manipulação de arquivo .txt em C [RESOLVIDO]

Jackson Fernandes Aragão Terceiro
jacksonterceiro

(usa XUbuntu)

Enviado em 04/04/2016 - 17:43h

Mas a questao é, como que faço isso no codigo? Quais funçoes eu uso?


6. Re: Manipulação de arquivo .txt em C [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 04/04/2016 - 18:13h

Você precisa ler uma linha do arquivo e armazenar numa string.
Depois comparar a primeira letra da string com a que você quer.
E otimização que pode fazer ao invés de ler o arquivo todo, ler somente até letra+1, letra+2, letra+3 ... se der.

----------------------------------------------------------------------------------------------------------------
# apt-get purge systemd (não é prá digitar isso!)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



7. Re: Manipulação de arquivo .txt em C [RESOLVIDO]

Ramon Sales
RamonSales

(usa Ubuntu)

Enviado em 05/04/2016 - 11:56h

Basta fazer uma verificação toda vez que for encontrado o caractere de espaço (olhar na tabela ASCII ), caso seja a letra que você procura adicione o nome em um vetor. Tente postar o andamento do programa, nem que sejam só 5 linhas, rsrsrsr, brincadeira.


8. RE: Manipulação de arquivo .txt em C

Jackson Fernandes Aragão Terceiro
jacksonterceiro

(usa XUbuntu)

Enviado em 05/04/2016 - 16:38h

Aqui está uma parte do código

printf("Entrou no case 1\n");
token = strtok(NULL, ";");
printf("Letra: %s\n", token);

telefonica = fopen("contatos.txt", "r");//Abre o arquivo .txt //LER "r"
if (telefonica == NULL)
{
printf("Não existe arquivo!");
}
while(1)
{

char c;
char e;

c = getc(telefonica);

if ((c == EOF) || (e == EOF))
{
break;
}
printf("Letras_Contatos Cadastrados: %c\n", c);

do
{
e = getc(telefonica);

if (e == EOF)
{
break;
}

//printf("Caractere lido: %c\n", e);
}while( e != '\n' );

if (c == 'J')
{
printf("Achou a comparação!!\n");
}




Preciso que quando ele ache um contato com a letra J ele imprima no terminal toda a linha contendo o nome e o telefone. E em seguida continue procurando para ver se achar mais algum contato com a letra J.


9. Re: Manipulação de arquivo .txt em C [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 05/04/2016 - 17:47h

jacksonterceiro escreveu:

Aqui está uma parte do código

printf("Entrou no case 1\n");
token = strtok(NULL, ";");
printf("Letra: %s\n", token);

telefonica = fopen("contatos.txt", "r");//Abre o arquivo .txt //LER "r"
if (telefonica == NULL)
{
printf("Não existe arquivo!");
}


Veja que legal: você imprime uma mensagem dizendo que o arquivo não existe mas, mesmo assim, continua a linha seguinte a executar como se ele existisse!

                             while(1)
{

char c;
char e;

c = getc(telefonica);

if ((c == EOF) || (e == EOF))
{
break;
}


Epa! Você está testando o valor de e antes de o definir. Assim, o se programa pode abortar o loop, se calhar de, por acaso, o valor inicial de e for convertido em EOF.

Outro erro nesse mesmo trecho: c e e deveriam ter sido declarados como int, não como char, pois a função getc() retorna int, e o valor EOF é uma constante inteira fora da faixa de 0 a 255 (ou -128 a 127). Se você usar char para essas variáveis, suas comparações com EOF vão sempre ser problemáticas, caindo em um dos dois seguintes casos:

1) Se char for sem sinal (i.e. tiver valores entre 0 e 255), na hora de comparar com a constante inteira EOF (que normalmente vale -1), a comparação será sempre falsa, mesmo que você tenha chegado ao final do arquivo e getc() tenha tentado lhe sinalizar isso.

2) Se char for com sinal (como é na maioria dos nossos PCs, o que implica ter valores que vão de -128 a 127), fica impossível distinguir EOF do caráter com valor 255 (que nos sistemas de codificação ISO-8859-1, ISO-8859-15 e Windows-1252, usados para líguas do Oeste da Europa, corresponde ao símbolo “ÿ”, ou “Y minúsculo com trema”). Isso acontece porque a atribuição do valor 255 a um char com sinal o converte aquele 255 para -1, o qual, na hora de ser comparado com um inteiro com sinal (que é o caso de EOF), é convertido para a representação inteira de -1, e não de volta para 255.

                                printf("Letras_Contatos Cadastrados: %c\n", c);

do
{
e = getc(telefonica);

if (e == EOF)
{
break;
}

//printf("Caractere lido: %c\n", e);
}while( e != '\n' );

if (c == 'J')
{
printf("Achou a comparação!!\n");
}




Preciso que quando ele ache um contato com a letra J ele imprima no terminal toda a linha contendo o nome e o telefone. E em seguida continue procurando para ver se achar mais algum contato com a letra J.


E por que você, em vez de ler caráter a caráter, não lê de linha em linha?


10. RE: Manipulação de arquivo .txt em C

Jackson Fernandes Aragão Terceiro
jacksonterceiro

(usa XUbuntu)

Enviado em 11/04/2016 - 11:43h

Caramba gente muitoooooo obrigado. Ajudou pra caramba!!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts