Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Xaws

Ler arquivo txt em GUI

Recommended Posts

 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

Editado por Xaws
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

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!

Editado por Fernando Mercês
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • @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:

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    É 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!

    Editado por Fernando Mercês
    • Amei 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  •  

     

    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 

    Editado por Xaws

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    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

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • @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

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • @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:

    Editado por Xaws

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×