Inquiridor
Rotina que ordena alfabeticamente uma lista de nomes num arquivo txt

Pergunta
-
Olá mestres, estou querendo só para fins de aprender como se faz uma rotina que gostaria que fosse assim:
Num Form tenho dois TextBox e um Button.
O TextBox1, serve para escrever um nome qualquer, por exemplo: Antonio
Após escrito o nome Antonio, dou um <enter> e este nome vai para um arquivo txt e o TextBox1 fica automaticamente em branco já com o cursor esperando um novo nome a ser inserido.
Escrevo um segundo nome no TextBox1, por exemplo: Marcos
Novamente então, após o <enter> o TextBox1 fica em branco e no arquivo txt já ficaria assim:
Antonio
Marcos
Basicamente isso, posso ficar colocando nomes e o arquivo vai se ordenando a cada <enter> no TextBox1.
Para visualizar a lista, dou um click no Button1 e a rotina carrega a lista no TextBox2 que será MultiLine e com ScrollBars.
Alguém pode me mostrar uma rotina em VB.Net que faça isso?
Grato / Durval
Todas as Respostas
-
Durval Teixeira,
Acredito que para você colocar as caixas de texto e o botão, guardar o conteúdo de uma caixa de texto em uma variável e apagar o conteúdo de uma caixa de texto é bem simples. Você sabe fazer isso, certo?
Agora, quanto a ordenação, achei dois exemplos bem bacanas. uma expressão lambda e uma função.
================================================
Ordenar texto de um textbox
expressão lambda
string[] listaD = txtId.Text.split(';').Tolist().OrderBy(); ou sort no array de string.
Função em C# (converta para VB.Net):
private void btnOrdenar_Click(object sender, EventArgs e) { var arrBaguncadas = txtLetrasBaguncadas.Text.ToArray();//texto que será ordenado var arrOrdenadas = new char[arrBaguncadas.GetLength(0)]; for (int a = 0; a < arrBaguncadas.GetLength(0); a++)//percorrer todas as letras { var letraParaTestar = arrBaguncadas[a]; var posicaoDaLetra = 0; for (int b = 0; b < arrBaguncadas.GetLength(0); b++) //ver em que posição a letra deve estar { //se tiver letra menor ou se a letra está repetida e já existe no array ordenado if (letraParaTestar > arrBaguncadas[b] || arrOrdenadas[b] == letraParaTestar) posicaoDaLetra++; } arrOrdenadas[posicaoDaLetra] = letraParaTestar; } txtLetrasOrdenadas.Text = new string(arrOrdenadas); }
https://social.msdn.microsoft.com/Forums/vstudio/pt-BR/3378b31e-8188-4f2f-97a8-17c7465b1ade/ordenar-texto-de-um-textbox?forum=vsvbasicpt
================================================
[]'s,
Fabio I. -
Olá Fabio, valeu, obrigado por responder. Converti a rotina para o VB.Net e ela funcionou, só que não era bem isso que eu estou querendo.
Eu quero ordenar nomes dispostos em uma coluna dentro do arquivo txt, após ordenados deve ficar algo assim:
Antonio
Aquiles
Bernardo
Claudio
Cleide
Jonas
Zélia
Public Class Form1
Private Sub btnOrdenar_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnOrdenar.Click
Dim arrBaguncadas = txtLetrasBaguncadas.Text.ToArray()
Dim arrOrdenadas = New Char(arrBaguncadas.GetLength(0) - 1) {}
For a As Integer = 0 To arrBaguncadas.GetLength(0) - 1
Dim letraParaTestar = arrBaguncadas(a)
Dim posicaoDaLetra = 0
For b As Integer = 0 To arrBaguncadas.GetLength(0) - 1
If letraParaTestar > arrBaguncadas(b) OrElse arrOrdenadas(b) = letraParaTestar Then posicaoDaLetra += 1
Next
arrOrdenadas(posicaoDaLetra) = letraParaTestar
Next
txtLetrasOrdenadas.Text = New String(arrOrdenadas)
End Sub
End Class