Jump to content
Paulo Alexandre

Procurar nome num ficheiro de Texto (TXT) - Problema

Recommended Posts

Paulo Alexandre

Olá,

Estou a construir um programa no VB.Net que tem como objetivo criar um ficheiro de texto chamado "Agenda.txt". Este programa inclui várias opções/botões na interface gráfica como: INSERIR (isto é, inserir o nome e o telefone da pessoa), LISTAR (após gravar os dados no ficheiro, esta opção mostra esses dados numa DataGrid), APAGAR, PROCURAR (procurar o nome no ficheiro através de uma sugestão de um nome pelo utilizador), e por fim GRAVAR E SAIR.

Ora, o problema é que na opção PROCURAR, eu quero exibir uma mensagem no ecrã a dizer "O nome introduzido não foi encontrado na lista" quando o utilizador tenta procurar por um nome que deseja e esse nome não se encontra na lista. Quando eu procuro por um nome não existente na lista, essa mensagem aparece-me muitas vezes - o nº de vezes que me aparece é exatamente o mesmo nº de linhas que o ficheiro tem (essas linhas contêm cada nome que já foi inserido + uma linha em branco), ou seja a mensagem vai aparecendo enquanto não encontrar o nome na lista.

Eu tive sucesso em fazer o inverso - procurar um nome que esteja na lista, e felizmente a MessageBox aparece-me apenas uma vez (quando efetivamente encontra o nome na agenda).

O código é:

 

Dim i As Integer
        Dim nome As String
        nome = InputBox("Qual o nome a procurar")
        For i = 0 To Form3.DataGridView1.RowCount - 1
            If nome = Form3.DataGridView1.Rows(i).Cells(0).Value Then
                Form3.DataGridView1.Rows(i).Selected = True
                MessageBox.Show("O nome introduzido foi encontrado na lista.")
            End If
        Next

 

Se alguém pudesse me dar uma dica como é que eu devia incluir a messagem de "O nome não foi encontrado" apenas uma vez, seria ótimo!

Edited by Paulo Alexandre

Share this post


Link to post
Share on other sites
Antonio Silva Magalhaes

Bom dia,

Isso acontece porque estas a percorrer todas as linhas da Datagrid, e, enquanto percorres as linhas, vais verificando se a linha onde te encontras coincide com o nome inserido na textbox, como nao coincide ele lança a mensagem a informar isso mesmo.

O que tens que fazer é garantir que só quando o Loop esta na ultima linha, e se essa mesma ultima linha também nao coincidir com o nome inserido, ele lançar a mensagem.

Abraço

AM

  • Vote 1

Share this post


Link to post
Share on other sites
Paulo Alexandre
58 minutos atrás, Antonio Silva Magalhaes disse:

O que tens que fazer é garantir que só quando o Loop esta na ultima linha, e se essa mesma ultima linha também nao coincidir com o nome inserido, ele lançar a mensagem.

Alguma sugestão? É que eu já tentei de tudo - Else's, ElseIf's, já tentei pôr fora do ciclo, mas é inútil. A mensagem vai aparecendo enquanto o nome não coincidir com aquele que o utilizador introduz no botão "Procurar".

Share this post


Link to post
Share on other sites
miglaranjeira

Bom dia,

Podes utilizar uma variável auxiliar e dar a resposta fora do ciclo

Dim i As Integer
Dim aux as Integer=0
        Dim nome As String
        nome = InputBox("Qual o nome a procurar")
        For i = 0 To Form3.DataGridView1.RowCount - 1
            If nome = Form3.DataGridView1.Rows(i).Cells(0).Value Then
                Form3.DataGridView1.Rows(i).Selected = True
                aux=1
				exit for
            End If
        Next
		if aux=1 then
			MessageBox.Show("O nome introduzido foi encontrado na lista.")
		else
			MessageBox.Show("O nome introduzido não foi encontrado na lista.")
		end if

Um abraço

Miguel Laranjeira

Edited by miglaranjeira
  • Vote 1

Share this post


Link to post
Share on other sites
Paulo Alexandre
7 minutos atrás, miglaranjeira disse:

Bom dia,

Podes utilizar uma variável auxiliar e dar a resposta fora do ciclo


Dim i As Integer
Dim aux as Integer=0
        Dim nome As String
        nome = InputBox("Qual o nome a procurar")
        For i = 0 To Form3.DataGridView1.RowCount - 1
            If nome = Form3.DataGridView1.Rows(i).Cells(0).Value Then
                Form3.DataGridView1.Rows(i).Selected = True
                aux=1
				exit for
            End If
        Next
		if aux=1 then
			MessageBox.Show("O nome introduzido foi encontrado na lista.")
		else
			MessageBox.Show("O nome não introduzido foi encontrado na lista.")
		end if

Um abraço

Miguel Laranjeira

Perfeito! Muito obrigado, não pensei nisso. Realmente, essa ideia de pôr o "Exit for" foi inteligente e a auxiliar também simplifica as coisas.

 

A sério, tu não sabes o quanto me ajudaste! Abraço!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.