Jump to content

Extrair números de items da Listbox


Nuno Teixeira
 Share

Recommended Posts

Olá a todos,

Alguém conhece algum método para extrair apenas os números de cada item de uma Listbox?

Tentei com o método substring(), ou seja, retirar um número pré-definido de caracteres até restar apenas os últimos caracteres de cada item:

Private Sub Button4_Click(sender As System.Object, e As System.EventArgs) Handles Button4.Click

Dim x As Integer

For x = 0 To ListBox1.Items.Count - 1

ListBox1.Items(x) = ListBox1.Items(x).substring(0, 7)

Next x

End Sub

Se for inserindo items na Listbox e depois aplicar este método as coisas até resultam. No entanto não é o método ideal pois alguns dígitos são apagados no caso de o número ter mais do que 1 dígito.

Este método retorna um erro se em vez de inserir items na Listbox importar um ficheiro txt para dentro dessa mesma Listbox (aparentemente ele não reconhece o Index da Listbox).

Idealmente o que preciso é de um método para extrair os números de cada item da Listbox, independentemente se os items são inseridos progressivamente ou se são importados para dentro da Listbox.

Agradeço desde já a ajuda que alguém me possa dar.

Cumprimentos,

Nuno Teixeira

Link to comment
Share on other sites

Obrigado Vikcch,

Vou tentar adaptar este código às minhas necessidades:

Private Sub Button6_Click(sender As System.Object, e As System.EventArgs) Handles Button6.Click
  Dim input As String = list_device1.SelectedItem
  Dim output As String = New String((From c As Char In input Select c Where Char.IsDigit(c)).ToArray())
  TextBox1.Text = output
End Sub

Um evento click de um botão extrai o item seleccionado da listbox e apresenta-o numa textbox. Penso que dará para o que preciso, mas sou todo ouvidos se houver uma forma melhor.

Respondendo à tua pergunta, não existe qualquer separador entre o texto e os números. Fica aqui um exemplo:

BACKWARD 1

Significa que o programa VB.NET dará instruções via serialPort para um robot se deslocar 1 metro à retaguarda (o programa VB:NET recebe a leitura dos encoders das rodas do robot).

Consegues dar-me uma sugestão de código melhor do que o que tenho neste momento?

Obrigado

Link to comment
Share on other sites

Acho que melhor é mesmo regex, tem que importar System.Text.RegularExpressions

eu prefiro fazer manualmente... está aí tambem um exemplo

		Dim input As String = "BACKWARD 1"


	Dim output As String = Regex.Replace(input, "[\d]", String.Empty)
	MsgBox(output)


	output = String.Empty
	For Each c As Char In input
		If Not "0123456789".Contains(c) Then
			output &= c
		End If
	Next
	MsgBox(output)
Edited by vikcch
Link to comment
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
 Share

×
×
  • 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.