Ir ao conteúdo
  • Cadastre-se

Ler arquivo txt em GUI


Xaws

Posts recomendados

 Como faço pra que meu programa leia o que está em um arquivo TXT e jogue o que está lá pro listbox?

Tentei da seguinte forma mais não deu certo
 

                    estoque = fopen ("estoque.txt","r");
					SendMessage(gProductList, LB_ADDSTRING, 0, (LPARAM)estoque);
					fclose(estoque);

 Segue em anexo o código completo
 

código.txt

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Seguindo a lógica que você seguiu, teria que usar a fread() antes de fechar o arquivo com a fclose(). No entanto, tem conceitos misturados aí. Você tá usando as funções da API do Windows e misturando com as da biblioteca C padrão (fopen(), fread(), fclose(), etc). Seria mais legal usar as do Windows mesmo (CreateFile(), ReadFile(), WriteFile(), CloseFile(), etc), mas claro, nada impede de você seguir na sua lógica. :)

 

Aqui tem um exemplo usando as funções do Windows: Opening a File for Reading or Writing, mas vê aí que a gente se ajuda por aqui. ;)

 

Abraços!

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Fernando Mercês  Não jovem, você entendeu errado :P... O que ele deveria fazer é ler o que está no arquivo de texto e enviar pra uma listbox... Tenho certeza que o que está errado no meu código é a parte do SendMessage...
 Deveria vir seguido de um SetWindowText ou GetWindowText, o problema é que eu não to conseguindo :tw_bawling:

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

É que abrir é diferente de ler. Até agora, pelo que vi no seu código você só abre os arquivos, não lê seu conteúdo. Pra ler tem que usar ReadFile() ou fread(). ;)

 

Por exemplo, se você fizer assim, vai funcionar:

 

			case IDC_BUTTON_LIST:
				{
			
					estoque = fopen ("estoque.txt","r");
					char buff[255];
					fread(buff, 1, 255, estoque);
					SendMessage(gProductList, LB_ADDSTRING, 0, (LPARAM)buff);
					fclose(estoque);
				}
				break;

Só que isso não tá bom, nem certo. rs

 

O lance é que ler linhas em C é chato mesmo. Acho que mais coerente seria usar a fgets() e você tem que saber o tamanho máximo da linha, de qualquer forma. ;)

 

Mas eu ainda acho que a API do Windows pura poderia fazer tudo. Bem, tu que sabe...

 

Abraço!

  • Amei 1
Link para o comentário
Compartilhar em outros sites

 

 

adicionado 6 minutos depois

@Fernando Mercês  Percebi que editou sua postagem,testei e funcionou... Obrigado sensei kk :lol:

adicionado 27 minutos depois

@Fernando Mercês  Só mais uma dúvida, como posso fazer a quebra de linha? Já fiz pra quando escrever no arquivo ele fazer a quebra de linha automática mais na hora de ler ele joga tudo na mesma linha 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Tamo junto! ;)

 

Eu acho que a mensagem LB_ADDSTRING só deixa adicionar um item mesmo (que acaba na quebra de linha). Acho que você vai ter que chamá-la várias vezes. Por isso falei da fgets(), que você chama várias vezes também, aí lê linha por linha e já fica pronto pra passar pra SendMessage(). Ou fscanf()?

 

Pra ser honesto, não sei qual a melhor solução pro seu caso. Cada item vai estar numa linha? Em qual formato? Sorry, eu raramente trabalho com arquivos de texto. :(

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@Fernando Mercês  É uma listbox,ele vai jogar cada item em uma linha...Mudei de listbox pra STATIC e ele funciona mais depois de alguns itens ele da umas bugadas tipo assim
ITEM ø^6 ou então o nome do item é item 120  ai ele duplica o final ITEM 120 120
 Tenso...mesmo assim obrigado, ajudou demais :P

Link para o comentário
Compartilhar em outros sites

@Fernando Mercês  Não sei se pode reviver um tópico assim (mesmo sendo sobre o assunto) testei com o fgets e deu certo man obrigado, já vou postar aqui pra quem estiver com a mesma dúvida que eu tinha e ver este tópico

 

/*Pra listar os itens de um arquivo linha por linha no ListBox*/
EX:
case IDC_BUTTON_LIST:
				{
					estoque = fopen ("estoque.txt","r");
					char le[100000];
					char le2[100000];
					if((fgets(le,100000,estoque) != NULL) && (fgets(le2,100000,estoque) != NULL))
					{
					SendMessage(gProductList, LB_ADDSTRING, 0, (LPARAM)le);
					SendMessage(gProductList, LB_ADDSTRING, 0, (LPARAM)le2);
					SetWindowText(gProductList,le);
					SetWindowText(gProductList,le2);
					fclose(estoque);
				}
			}

 

  O problema é que assim eu preciso declarar todas as linhas separadas,alguém tem ideia de como eu posso resolver isso?
 Tentei fazendo assim mais fala que precisa de incremento pra lvalue
 

estoque = fopen ("estoque.txt","r");
					char le[100000];
					if((fgets(le,100000,estoque) != NULL))
					for(fgets == 0; fgets != 0; fgets++);
					{
					SendMessage(gProductList, LB_ADDSTRING, 0, (LPARAM)le);
					SetWindowText(gProductList,le);
					fgets++;
					fclose(estoque);

:atirador:

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...