none
Como fazer uma rotina que faça uma inserção? RRS feed

  • Pergunta

  • Amigos do MSDN, preciso de uma ajuda nessa rotina. Ela trabalha com VB no Windows Forms.

    Existe uma lista de 100 nomes de pessoas que estão dispostos em coluna num arquivo texto do Bloco de Notas,  a rotina que cria esses 100 nomes e os coloca em uma coluna no Bloco de Notas eu já fiz, preciso fazer outra rotina que faça alterações na disposição desses 100 nomes.

    Essa alteração deve ser da seguinte forma:

    Um dos 100 nomes, digamos que seja o Pedro que ocupa a trigésima linha nessa coluna de 100 nomes do Bloco de Notas, e na vigésima linha está o João, a rotina precisa selecionar e recortar o Pedro em seguida inseri-lo no lugar do João deixando o Pedro na linha acima do João mantendo os 100 nomes e sem nenhum espaço vazio na lista, apenas alterando a disposição dos nomes do Pedro e João.

    Então a rotina que preciso teria que perguntar: Qual nome você precisa alterar a disposição? Colocaria num TextBox o nome Pedro

    No lugar de quem o Pedro precisa ir? Colocaria em outro TextBox o nome João, daria um enter e a alteração seria realizada na lista do Bloco de Notas.

    Alguém me dê essa força por favor.

    quarta-feira, 27 de fevereiro de 2019 04:03

Todas as Respostas

  • Bom dia Durval, tudo certo?

    Se eu estivesse no seu lugar, usaria o tipo DataTable. Ele lhe permite manipular tabelas (linhas, colunas e células) de maneira bem mais intuitiva que lidar com texto diretamente.

    Eu começaria por converter, durante tempo de execução, o arquivo texto em um DataTable para então fazer as alterações. Depois, salvaria o DataTable para .txt novamente.

    Não sei exatamente como é a estrutura do seu arquivo de texto, como é feita a delimitação das colunas e etc. Mas algo assim funcionaria para ler o .txt para um DataTable:

    Public Function ConvertToDataTable(filePath As String, numberOfColumns As Integer) As DataTable
    	Dim tbl As New DataTable()
    
    	For col As Integer = 0 To numberOfColumns - 1
    		tbl.Columns.Add(New DataColumn("Column" + (col + 1).ToString()))
    	Next
    
    
    	Dim lines As String() = System.IO.File.ReadAllLines(filePath)
    
    	For Each line As String In lines
    		Dim cols = line.Split(":"C)
    
    		Dim dr As DataRow = tbl.NewRow()
    		For cIndex As Integer = 0 To 2
    			dr(cIndex) = cols(cIndex)
    		Next
    
    		tbl.Rows.Add(dr)
    	Next
    
    	Return tbl
    End Function
    

    Essa função faria a leitura do .txt para um DataTable, informando o caminho do arquivo de texto e o número de colunas que nele há.

    Logicamente, como não sei como seu arquivo está formatado, como é feita a separação entre as colunas, talvez seja necessária alguma adaptação.

    Referências:

    How to Read text file to DataTable [closed]

    Convert C# to VB.NET

    Write Rows from DataTable to Text File

    DataTable Class

    Espero ter ajudado. Abraço!


    Herbert Lausmann

    quarta-feira, 27 de fevereiro de 2019 11:35
  • Olá Herbert, muito obrigado pela sua atenção.

    Estou tentando montar um pequeno aplicativo que possa gerenciar o uso de uma pirâmide de jogo de tênis para um grupo de amigos que praticamos o jogo de tênis aqui em Curitiba.

    Montei uma pirâmide usando 105 TextBox e neles insiro os nomes dos tenistas que hoje somos em 66, usei 105 Labels para identificar a numeração que vai de 1 até 105. Então em cima do TextBox1 coloquei o Label1 com seu Text=1 e assim até o 105.

    Já fiz uma rotina usando Excell (VBA) e está funcionando, mas resolvi tentar monta-la usando VB com Windows Forms para facilitar o uso em outros PC's.

    A minha rotina em VB Windows Forms que permite colocar até 105 nomes em uma única coluna no Bloco de Notas é essa abaixo, poderia me orientar como devo adaptar essa sua rotina para então fazer as trocas de posições que mensalmente ocorrem entre os participantes dessa pirâmide?

    Imports System.IO

    Public Class Form1
        Dim numPart As Integer
        Dim W As IO.StreamWriter
        'rotina que monta a pirâmide
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim numRank = New Label() {Label1, Label2, Label3, Label4, Label5, Label6, Label7, Label8, Label9, Label10, Label11, Label12, Label13, Label14, Label15, Label16, Label17, Label18, Label19, Label20, Label21, Label22, Label23, Label24, Label25, Label26, Label27, Label28, Label29, Label30, Label31, Label32, Label33, Label34, Label35, Label36, Label37, Label38, Label39, Label40, Label41, Label42, Label43, Label44, Label45, Label46, Label47, Label48, Label49, Label50, Label51, Label52, Label53, Label54, Label55, Label56, Label57, Label58, Label59, Label60, Label61, Label62, Label63, Label64, Label65, Label66, Label67, Label68, Label69, Label70, Label71, Label72, Label73, Label74, Label75, Label76, Label77, Label78, Label79, Label80, Label81, Label82, Label83, Label84, Label85, Label86, Label87, Label88, Label89, Label90, Label91, Label92, Label93, Label94, Label95, Label96, Label97, Label98, Label99, Label100, Label101, Label102, Label103, Label104, Label105}
            Dim nomesRank = New TextBox() {TextBox1, TextBox2, TextBox3, TextBox4, TextBox5, TextBox6, TextBox7, TextBox8, TextBox9, TextBox10, TextBox11, TextBox12, TextBox13, TextBox14, TextBox15, TextBox16, TextBox17, TextBox18, TextBox19, TextBox20, TextBox21, TextBox22, TextBox23, TextBox24, TextBox25, TextBox26, TextBox27, TextBox28, TextBox29, TextBox30, TextBox31, TextBox32, TextBox33, TextBox34, TextBox35, TextBox36, TextBox37, TextBox38, TextBox39, TextBox40, TextBox41, TextBox42, TextBox43, TextBox44, TextBox45, TextBox46, TextBox47, TextBox48, TextBox49, TextBox50, TextBox51, TextBox52, TextBox53, TextBox54, TextBox55, TextBox56, TextBox57, TextBox58, TextBox59, TextBox60, TextBox61, TextBox62, TextBox63, TextBox64, TextBox65, TextBox66, TextBox67, TextBox68, TextBox69, TextBox70, TextBox71, TextBox72, TextBox73, TextBox74, TextBox75, TextBox76, TextBox77, TextBox78, TextBox79, TextBox80, TextBox81, TextBox82, TextBox83, TextBox84, TextBox85, TextBox86, TextBox87, TextBox88, TextBox89, TextBox90, TextBox91, TextBox92, TextBox93, TextBox94, TextBox95, TextBox96, TextBox97, TextBox98, TextBox99, TextBox100, TextBox101, TextBox102, TextBox103, TextBox104, TextBox105}
            If TextBox115.Text = "" Then
                MsgBox("Entre com o número de tenistas!!!")
                Exit Sub
            End If
            numPart = TextBox115.Text
            For u = 0 To 104
                numRank(u).Visible = False
                nomesRank(u).Visible = False
            Next
            For n = 0 To (numPart - 1)
                numRank(n).Visible = True
                nomesRank(n).Visible = True
            Next
            'Label7.Visible = False
            'Button1.Visible = False
            'TextBox7.Visible = False
        End Sub
        'salva o aplicativo
        Private Sub SaveToolStripButton_Click(sender As Object, e As EventArgs) Handles SaveToolStripButton.Click
            Dim nomesRank = New TextBox() {TextBox1, TextBox2, TextBox3, TextBox4, TextBox5, TextBox6, TextBox7, TextBox8, TextBox9, TextBox10, TextBox11, TextBox12, TextBox13, TextBox14, TextBox15, TextBox16, TextBox17, TextBox18, TextBox19, TextBox20, TextBox21, TextBox22, TextBox23, TextBox24, TextBox25, TextBox26, TextBox27, TextBox28, TextBox29, TextBox30, TextBox31, TextBox32, TextBox33, TextBox34, TextBox35, TextBox36, TextBox37, TextBox38, TextBox39, TextBox40, TextBox41, TextBox42, TextBox43, TextBox44, TextBox45, TextBox46, TextBox47, TextBox48, TextBox49, TextBox50, TextBox51, TextBox52, TextBox53, TextBox54, TextBox55, TextBox56, TextBox57, TextBox58, TextBox59, TextBox60, TextBox61, TextBox62, TextBox63, TextBox64, TextBox65, TextBox66, TextBox67, TextBox68, TextBox69, TextBox70, TextBox71, TextBox72, TextBox73, TextBox74, TextBox75, TextBox76, TextBox77, TextBox78, TextBox79, TextBox80, TextBox81, TextBox82, TextBox83, TextBox84, TextBox85, TextBox86, TextBox87, TextBox88, TextBox89, TextBox90, TextBox91, TextBox92, TextBox93, TextBox94, TextBox95, TextBox96, TextBox97, TextBox98, TextBox99, TextBox100, TextBox101, TextBox102, TextBox103, TextBox104, TextBox105}
            Dim numRank = New Label() {Label1, Label2, Label3, Label4, Label5, Label6, Label7, Label8, Label9, Label10, Label11, Label12, Label13, Label14, Label15, Label16, Label17, Label18, Label19, Label20, Label21, Label22, Label23, Label24, Label25, Label26, Label27, Label28, Label29, Label30, Label31, Label32, Label33, Label34, Label35, Label36, Label37, Label38, Label39, Label40, Label41, Label42, Label43, Label44, Label45, Label46, Label47, Label48, Label49, Label50, Label51, Label52, Label53, Label54, Label55, Label56, Label57, Label58, Label59, Label60, Label61, Label62, Label63, Label64, Label65, Label66, Label67, Label68, Label69, Label70, Label71, Label72, Label73, Label74, Label75, Label76, Label77, Label78, Label79, Label80, Label81, Label82, Label83, Label84, Label85, Label86, Label87, Label88, Label89, Label90, Label91, Label92, Label93, Label94, Label95, Label96, Label97, Label98, Label99, Label100, Label101, Label102, Label103, Label104, Label105}
            Dim nome As String
            If TextBox130.Text = "" Then
                MsgBox("Entre com o nome da pirâmide (exemplo: marco2019) ")
                Exit Sub
            End If
            nome = TextBox130.Text
            'pergunta se existe o diretório C:\Usuarios\Home se não existe,cria-o
            If IO.Directory.Exists("C:\Usuario\Home") = False Then IO.Directory.CreateDirectory("C:\Usuario\Home")
            'pergunta se já existe o arquivo "C:\Usuarios\Home" & nome & ".txt","") se não existe, cria-o
            If IO.File.Exists("C:\Usuario\Home\piramide_" & nome) = False Then File.AppendAllText("C:\Usuario\Home\piramide_" & nome & ".txt", "")
            'atribui o nome do caminho a letra W
            W = New IO.StreamWriter("C:\Usuario\Home\piramide_" & nome & ".txt")
            'salva o número de partipantes
            W.WriteLine(numPart)
            'salva os nomes dos tenistas
            For u = 0 To (numPart - 1)
                W.WriteLine(nomesRank(u).Text)
            Next
            'salva os números do Rank
            For u = 0 To (numPart - 1)
                W.WriteLine(numRank(u).Text)
            Next
            W.Close()
            'aciona o timer e avisa que foi salvo com sucesso
            Label110.Visible = True 'label110="Salvo com sucesso!!!"
            Timer1.Interval = 1000 'intervalo de 1 segundo
            Timer1.Start() 'dispara o timer
        End Sub
        'encerra o timer em 1 segundo
        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            Timer1.Stop()
            Label110.Visible = False 'label12="Salvo com sucesso!!!"
        End Sub
        'carrega baseado no nome do arquivo no Bloco de Notas
        Private Sub OpenToolStripButton_Click_1(sender As Object, e As EventArgs) Handles OpenToolStripButton.Click
            Dim nomesRank = New TextBox() {TextBox1, TextBox2, TextBox3, TextBox4, TextBox5, TextBox6, TextBox7, TextBox8, TextBox9, TextBox10, TextBox11, TextBox12, TextBox13, TextBox14, TextBox15, TextBox16, TextBox17, TextBox18, TextBox19, TextBox20, TextBox21, TextBox22, TextBox23, TextBox24, TextBox25, TextBox26, TextBox27, TextBox28, TextBox29, TextBox30, TextBox31, TextBox32, TextBox33, TextBox34, TextBox35, TextBox36, TextBox37, TextBox38, TextBox39, TextBox40, TextBox41, TextBox42, TextBox43, TextBox44, TextBox45, TextBox46, TextBox47, TextBox48, TextBox49, TextBox50, TextBox51, TextBox52, TextBox53, TextBox54, TextBox55, TextBox56, TextBox57, TextBox58, TextBox59, TextBox60, TextBox61, TextBox62, TextBox63, TextBox64, TextBox65, TextBox66, TextBox67, TextBox68, TextBox69, TextBox70, TextBox71, TextBox72, TextBox73, TextBox74, TextBox75, TextBox76, TextBox77, TextBox78, TextBox79, TextBox80, TextBox81, TextBox82, TextBox83, TextBox84, TextBox85, TextBox86, TextBox87, TextBox88, TextBox89, TextBox90, TextBox91, TextBox92, TextBox93, TextBox94, TextBox95, TextBox96, TextBox97, TextBox98, TextBox99, TextBox100, TextBox101, TextBox102, TextBox103, TextBox104, TextBox105}
            Dim numRank = New Label() {Label1, Label2, Label3, Label4, Label5, Label6, Label7, Label8, Label9, Label10, Label11, Label12, Label13, Label14, Label15, Label16, Label17, Label18, Label19, Label20, Label21, Label22, Label23, Label24, Label25, Label26, Label27, Label28, Label29, Label30, Label31, Label32, Label33, Label34, Label35, Label36, Label37, Label38, Label39, Label40, Label41, Label42, Label43, Label44, Label45, Label46, Label47, Label48, Label49, Label50, Label51, Label52, Label53, Label54, Label55, Label56, Label57, Label58, Label59, Label60, Label61, Label62, Label63, Label64, Label65, Label66, Label67, Label68, Label69, Label70, Label71, Label72, Label73, Label74, Label75, Label76, Label77, Label78, Label79, Label80, Label81, Label82, Label83, Label84, Label85, Label86, Label87, Label88, Label89, Label90, Label91, Label92, Label93, Label94, Label95, Label96, Label97, Label98, Label99, Label100, Label101, Label102, Label103, Label104, Label105}
            Dim R As IO.StreamReader
            Dim nome As String
            If TextBox130.Text = "" Then
                MsgBox("Preencha o nome da pirâmide. (exemplo: abril2019)")
                Exit Sub
            End If
            nome = TextBox130.Text
            'pergunta se existe o diretório C:\Usuarios\Home se não existe,cria
            If IO.Directory.Exists("C:\Usuario\Home") = False Then IO.Directory.CreateDirectory("C:\Usuario\Home" & ".txt")
            'pergunta se já existe o arquivo "C:\Usuarios\Home\piramide_" & nome & "txt" se não existe, cria
            If IO.File.Exists("C:\Usuario\Home\piramide_" & nome & ".txt") = False Then File.AppendAllText("C:\Usuario\Home\piramide_" & nome & ".txt", "")
            R = New IO.StreamReader("C:\Usuario\Home\piramide_" & nome & ".txt")
            numPart = R.ReadLine
            For u = 0 To 104
                numRank(u).Visible = False
                nomesRank(u).Visible = False
            Next
            For n = 0 To (numPart - 1)
                numRank(n).Visible = True
                nomesRank(n).Visible = True
            Next
            'carrega os nomes dos tenistas
            For u = 0 To (numPart - 1)
                nomesRank(u).Text = R.ReadLine
            Next
            'carrega os números do Rank
            For u = 0 To (numPart - 1)
                numRank(u).Text = R.ReadLine
            Next
            R.Close()
        End Sub

    End Class

    quarta-feira, 27 de fevereiro de 2019 22:12
  • Certo, adicionalmente, poderia postar um print da Janela do Winforms para eu visualizar como os TextBoxes estão posicionados?

    Só para facilitar a minha compreensão da situação.


    Herbert Lausmann

    quarta-feira, 27 de fevereiro de 2019 22:17
  • Herbert, pode me dar uma instrução como faço para postar um print do Form1. Tem coisas que ainda me bato para fazer. 

    Antecipando, já que ainda não consegui te mandar a tela do Form1, os 105 TextBox estão dispostos em forma de uma pirâmide com os 105 labels em cima de cada TextBox apenas para numerar os 105 TextBox.

    Essa pirâmide é montada da seguinte forma: O TextBox1 fica no ápice da pirâmide, em baixo do TextBox1 vão os TextBox2 e 3, em baixo dos TextBox2 e 3 vão os TextBox4, 5 e 6 e dessa forma até o 105.

    quinta-feira, 28 de fevereiro de 2019 03:18
  • Olá Herbert, consegue me dar aquela força?

    Grato/Durval

    quinta-feira, 7 de março de 2019 18:56
  • Durval, isso precisa ser em bloco de notas? 

    Att, Frank Washington

    quarta-feira, 13 de março de 2019 16:34
  • Olá Frank, obrigado por responder. Eu não tenho muita experiência pois desconheço os outros recursos. O que eu posso dizer é que uma pirâmide que controla jogos de tênis é dinâmica, ela aumenta e pode diminuir o número de participantes, então penso que só um arquivo externo ao progrma para controlar os participantes e suas posições dentro da pirâmide.

    As posições dos tenistas nada mais é que uma simples tabela de nomes escritos em uma única coluna e "n" linhas, assim:

    João

    José

    Pedro

    Carlos

    A rotina que preciso seria, digamos, Carlos desafiou o José, Carlos ganhou, então Carlos passa a ocupar a posição do José e José passa a ficar embaixo do Carlos, consequentemente Pedro vira o quarto nessa tabela.

    Grato

    quinta-feira, 14 de março de 2019 03:29