none
Rotina que ordena alfabeticamente uma lista de nomes num arquivo txt RRS feed

  • 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

     

    sexta-feira, 25 de outubro de 2019 01:25

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.
    sexta-feira, 25 de outubro de 2019 13:33
  • 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

    sábado, 26 de outubro de 2019 01:43