Point Posted January 10, 2007 at 02:21 PM Report #75571 Posted January 10, 2007 at 02:21 PM Ppl, alguem me pode explicar como se faz o seguinte programa? (se possivel com exemplos de código) Form: http://img148.imageshack.us/img148/1381/untitledbd4.png Formatação do texto: http://img148.imageshack.us/img148/2409/capturaecra1ye4.png O objectivo é, ao inserir um dado (neste caso o nº) ele vá ao ficheiro de texto procurar e preencha as restantes textboxes com os dados do texto. Após isso, poder-se alterar o Nome ou a localidade e ele alterar isso no ficheiro de texto. PS, a formatação do texto não tem obrigatoriamente de ser essa. Se houver uma maneira que torne isso mais facil, digam.
Revolt Posted January 10, 2007 at 03:45 PM Report #75588 Posted January 10, 2007 at 03:45 PM para ires buscar os dados ao ficheiro de texto, uma coisa deste tipo dava: 'Variáveis globais para guardar os dados do ficheiro txt Public Numero() as String Public Nome() as String Public Localidade() as String 'Método para ler o conteúdo do ficheiro txt e guardá-lo nas variáveis Public Sub Ler() 'Dividir o texto em linhas Dim Linha() As String = Strings.Split(My.Computer.FileSystem.ReadAllText("C:\file.txt", System.Text.Encoding.UTF7), ControlChars.CrLf) Dim Elemento() As String 'Por cada linha For i As Integer = 0 To Linha.Length - 1 'Se não estiver vazia... If Linha(i) <> "" Then 'Ir buscar os elementos separados por vírgula Elemento = Strings.Split(Linha(i), ", ") 'Redeclarar e preservar a array para poder abranger todas as pessoas no ficheiro de texto ReDim Preserve Numero(i) 'Como o 1º elemento é o numero, adicioná-lo à array Numero Numero(i) = Elemento(0) 'Redeclarar e preservar a array para poder abranger todas as pessoas no ficheiro de texto ReDim Preserve Nome(i) 'Como o 2º elemento é o nome, adicioná-lo à array Nome Nome(i) = Elemento(1) 'Redeclarar e preservar a array para poder abranger todas as pessoas no ficheiro de texto ReDim Preserve Localidade(i) 'Como o 3º elemento é a localidade, adicioná-lo à array Localidade Localidade(i) = Elemento(2) 'Limpar a array Elementos para não haver conflitos com as outras linhas Array.Clear(Elemento, 0, Elemento.Length) End If Next 'Libertar Memória, visto que já não precisamos destas variáveis Elemento = Nothing Linha = Nothing 'Se este método foi chamado quando já existia um Numero na caixa de texto, ir para o método Procurar If TextBox1.Text <> "" Then Procurar() End If End Sub Para procurar uma pessoa com um certo numero usando o método seguinte, tem de se executar o método Ler() primeiro (talvez seja boa ideia metê-lo no evento Load do Form) Public Sub Procurar() 'Se estiver vazia então sair do método If TextBox1.Text = "" Then Exit Sub End If 'Por cada numero que esteja guardado... For i As Integer = 0 To Numero.Length - 1 'Se for igual ao número da textbox... If Numero(i) = TextBox1.Text Then 'Nome e Localidade com o mesmo i que o número representam a mesma pessoa, logo, preencher as caixas de texto TextBox2.Text = Nome(i) TextBox3.Text = Localidade(i) 'Sai do procedimento visto já termos encontrado a pessoa que queríamos Exit Sub End If Next 'Se não existir uma pessoa com aquele número, mostra uma mensagem e limpa todos os campos menos o número. MessageBox.Show("Não existe uma pessoa com esse número") TextBox2.Text = "" TextBox3.Text = "" E para guardar... Public Sub Guardar() 'Variável que vai guardar o texto a ser escrito no ficheiro. Dim Texto As String = "" 'Se a textbox1.text não está vazia então é porque há a possibilidade de se ter procedido a uma procura e de se terem alterado valores logo, temos que actualizar os valores das arrays. If TextBox1.Text <> "" Then For i As Integer = 0 To Numero.Length - 1 If Numero(i) = TextBox1.Text Then Nome(i) = TextBox2.Text Localidade(i) = TextBox3.Text End If Next End If 'Por cada dado da array (o número de dados numa array representa o nº de linhas) For i As Integer = 0 To Numero.Length - 1 'Criar uma linha na variável texto que contenha os dados da pessoa Texto &= Numero(i) & ", " & Nome(i) & ", " & Localidade(i) & ControlChars.CrLf Next 'Escrever a variável texto no ficheiro, substituíndo o que já lá está My.Computer.FileSystem.WriteAllText("C:\file.txt", Texto, False) End Sub NOTA: Textbox1 -> Numero TextBox2 -> Nome Textbox3 -> Localidade Não adicionei Try... Catch mas convém adicionares para apanhar todos os erros inerentes à leitura e gravação de ficheiros E provavelmente há um método mais simples mas há quem diga que gosto de complicar xD Revolt Website Antigo Nick: Pauzinhos
Point Posted January 12, 2007 at 04:11 PM Author Report #75928 Posted January 12, 2007 at 04:11 PM tks, era mesmo isso. Já agora, aí na parte do procurar, se eu quiser que ele ao verificar que o campo do nº está vazio, em vez de sair, verifique se o campo nome está preenchido e faça a busca por nome, o que é que é preciso alterar? (basicamente, poder fazer busca por nº ou nome)
Revolt Posted January 12, 2007 at 06:53 PM Report #75973 Posted January 12, 2007 at 06:53 PM Public Sub Procurar() If TextBox1.Text = "" Then 'Se ambas estiverem vazias então sair do método If TextBox2.Text = "" Then Exit Sub 'Senão, procurar nome Else 'Por cada nome que esteja guardado... For i As Integer = 0 To Nome.Length - 1 'Se for igual ao nome da textbox... If Nome(i) = TextBox2.Text Then 'Numero e Localidade com o mesmo i que o nome representam a mesma pessoa, logo, preencher as caixas de texto TextBox1.Text = Numero(i) TextBox3.Text = Localidade(i) 'Sai do procedimento visto já termos encontrado a pessoa que queríamos Exit Sub End If Next 'Se não tiver sido encontrada a pessoa com esse nome MessageBox.Show("Não existe uma pessoa com esse nome") TextBox1.Text = "" TextBox3.Text = "" Exit Sub End If 'Por cada numero que esteja guardado... For i As Integer = 0 To Numero.Length - 1 'Se for igual ao número da textbox... If Numero(i) = TextBox1.Text Then 'Nome e Localidade com o mesmo i que o número representam a mesma pessoa, logo, preencher as caixas de texto TextBox2.Text = Nome(i) TextBox3.Text = Localidade(i) 'Sai do procedimento visto já termos encontrado a pessoa que queríamos Exit Sub End If Next 'Se não existir uma pessoa com aquele número, mostra uma mensagem e limpa todos os campos menos o número. MessageBox.Show("Não existe uma pessoa com esse número") TextBox2.Text = "" TextBox3.Text = "" Revolt Website Antigo Nick: Pauzinhos
vbmaster Posted January 13, 2007 at 02:27 PM Report #76073 Posted January 13, 2007 at 02:27 PM Movido para a secção dúvidas e ajudas consoante as regras, lê-as. Futuros Threads serão bloqueados.
Point Posted January 13, 2007 at 08:34 PM Author Report #76098 Posted January 13, 2007 at 08:34 PM Hum, estive a transformar isso em classe, e ficou a funcionar bem. A seguir editei para permitir mais campos e agora o Ler() estoura Public Class Banc Public Numero() As String Public Nome() As String Public Email() As String Public Telefone() As String Public Nif() As String Public Rendimento() As String Public Data() As String Public Sub Ler(ByRef numer, ByRef name, ByRef mail, ByRef tlf, ByRef nifl, ByRef rend, ByRef datal, ByVal file) Dim Linha() As String = Strings.Split(My.Computer.FileSystem.ReadAllText(file, System.Text.Encoding.UTF7), ControlChars.CrLf) Dim Elemento() As String 'Por cada linha For i As Integer = 0 To Linha.Length - 1 'Se não estiver vazia... If Linha(i) <> "" Then 'Ir buscar os elementos separados por vírgula Elemento = Strings.Split(Linha(i), ", ", -1) 'Redeclarar e preservar a array para poder abranger todas as pessoas no ficheiro de texto ReDim Preserve Numero(i) 'Como o 1º elemento é o numero, adicioná-lo à array Numero Numero(i) = Elemento(0) 'Redeclarar e preservar a array para poder abranger todas as pessoas no ficheiro de texto ReDim Preserve Nome(i) 'Como o 2º elemento é o nome, adicioná-lo à array Nome Nome(i) = Elemento(1) 'Redeclarar e preservar a array para poder abranger todas as pessoas no ficheiro de texto ReDim Preserve Email(i) 'Como o 3º elemento é a localidade, adicioná-lo à array Localidade Email(i) = Elemento(2) ReDim Preserve Telefone(i) Telefone(i) = Elemento(3) ReDim Preserve Nif(i) Nif(i) = Elemento(4) ReDim Preserve Rendimento(i) Rendimento(i) = Elemento(5) ReDim Preserve Data(i) Data(i) = Elemento(6) 'Limpar a array Elementos para não haver conflitos com as outras linhas Array.Clear(Elemento, 0, Elemento.Length) End If Next 'Libertar Memória, visto que já não precisamos destas variáveis Elemento = Nothing Linha = Nothing 'Se este método foi chamado quando já existia um Numero na caixa de texto, ir para o método Procurar If name <> "" Then Procurar(numer, name, mail, tlf, Nif, rend, data) End If End Sub Ele estoura quando chega ao Email(i) = Elemento(2) Alguem me explica porque?
Point Posted January 13, 2007 at 08:58 PM Author Report #76099 Posted January 13, 2007 at 08:58 PM Nevermind, jà consgui resolver
Point Posted January 16, 2007 at 01:02 PM Author Report #76557 Posted January 16, 2007 at 01:02 PM Já agora, se eu quiser adicionar novos registos, como se faz? Pode-se usar as funções dadas em cima (com alterações), ou tem de se criar nova função?
Revolt Posted January 16, 2007 at 05:02 PM Report #76603 Posted January 16, 2007 at 05:02 PM crias um método em que adicionas mais um elemento a cada array e depois chamas o método guardar. Revolt Website Antigo Nick: Pauzinhos
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now