rigaspar Posted May 15, 2012 at 10:28 AM Report #455679 Posted May 15, 2012 at 10:28 AM Viva, Sou chamado um newbie em Visual Basic e estou a desenvolver um programa que pelos vistos é avançado demais para os poucos conhecimentos que tenho em Visual Basic. Já pesquisei e não consigo encontrar algo que me faça isto. Leia um texto todo procure as linhas que contem [ ] e retire o valor ou a palavra que se encontre entre os parentesis rectos. Consigo ter o valor em código VBScript mas em VB.Net não faço a minima ideia de como fazer isto. Nota que o ficheiro não tem a extensão INI isto porque o que pretendo é a informação do ficheiro rasphone.pbk que é muito parecido estruturalmente com um ficheiro INI. Const ForReading = 1 Dim objFSO : Set objFSO=CreateObject("Scripting.FileSystemObject") Dim strFile : strFile = "rasphone.pbk" Dim objIniFile Dim strLine Dim strSection If objFSO.FileExists(strFile) Then Set objIniFile = objFSO.OpenTextFile(strFile, ForReading, False) Do While objIniFile.AtEndOfStream = False strLine=Trim(objIniFile.ReadLine) If Left(strLine,1)="[" The strSection=Left(strLine, Len(strLine) -1) strSection=Right(strSection, Len(strSection) -1) wscript.echo strSection End If Loop objIniFile.Close Else Wscript.echo strFile & "Not exist" End If Se conseguirem fornecer-me algumas luzes de como fazer este código em VBasic ficaria grato. Obrigado
jpaulino Posted May 15, 2012 at 01:25 PM Report #455721 Posted May 15, 2012 at 01:25 PM Para ler só tens de fazer algo como: Dim total As Integer = 0 Dim fileName As String = "c:\teste.txt" ' Guarda num Array linha a linha Dim lines() As String = IO.File.ReadAllLines(fileName) ' Ciclo que irá mostrar linha a linha For Each line As String In lines Debug.WriteLine(line.ToString) total += 1 Next ' Mostra o total de linha lidas Debug.WriteLine("Total de linhas:" & total.ToString) Fonte: http://www.jorgepaulino.com/2008/06/vbnet-utilizao-de-ficheiros-de-texto.html Depois podes usar regex para extrair o que está dentro dos parentises ou através de funções de texto.
rigaspar Posted May 15, 2012 at 04:17 PM Author Report #455788 Posted May 15, 2012 at 04:17 PM <p>Obrigado Jpaulino mas acho que expliquei-me mal. Então é assim. Tenho este ficheiro rasphone.pbk cujo o conteudo é o seguinte:<br /> <br /> [VPN One]<br /> Encoding=1<br /> PBVersion=1<br /> <br /> [VPN Two]<br /> Encoding=1<br /> PBVersion=1<br /> <br /> [VPN Tree]<br /> Encoding=1<br /> PBVersion=1<br /> <br /> etc..etc<br /> <br /> O que pretendo é lêr o ficheiro todo e "retirar" e inserir numa combobox os valores que estão entre os parênteses rectos [ ]. Até ao momento o código que fiz foi o seguinte.<br /> <br /> <br /> Imports System.IO<br /> Public Class Form1<br /> Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load<br /> <br /> Dim ficheiro As New IO.StreamReader("C:\ProgramData\Microsoft\Network\Connections\Pbk\rasphone.pbk")<br /> Dim Texto As String = ""<br /> Dim Seccao As String<br /> <br /> Do While ficheiro.Peek() <> -1<br /> <br /> Texto = ficheiro.ReadLine()<br /> Seccao = Split(Texto, "[") <------ Erro Value of type 1- dimensional array of string cannot be converted to string<br /> Loop<br /> <br /> End Sub<br /> <br /> Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click<br /> Me.Close()<br /> Process.Start("rasphone.exe", "-d " & Chr(34) & "VPN One" & Chr(34))<br /> End Sub<br /> <br /> Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click<br /> Me.Close()<br /> Process.Start("rasphone.exe", "-d " & Chr(34) & "VPN Two" & Chr(34))<br /> End Sub<br /> <br /> Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click<br /> 'Botão Cancel<br /> Me.Close()<br /> End Sub<br /> <br /> Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click<br /> 'Botão OK<br /> 'ComboBox1.SelectedIndex = 0<br /> 'Posiciona a primeira 'MsgBox(ComboBox1.Items.Count) 'Informa quantas linhas tem o texto<br /> End Sub<br /> <br /> End Class<br /> <br /> <br /> <br /> <br /> Sei que o código está incompleto e que tem coisas a mais que não devia ter tais como os buttons_click. Usei estes botões apenas e só apenas para testar se conseguia iniciar a VPN pretendida. Mas o processo que desejo é eliminar os botões e passar a informação para a combobox. Portanto o organigrama do programa será.<br /> <br /> 1º Lêr o ficheiro rasphone.pbk <--- Check<br /> 2º Retirar a informação que se encontra entre parênteses rectos. <--- Como fazer?<br /> 3º Inserir a informação na combobox <--- Provamente será combobox1.items.add(linha)<br /> 4º Seleccionar o Item da combobox desejado e clicar no OK para iniciar a ligação à VPN <--- Verifica qual o index(0,1, 2 ou 3) e inicia a VPN<br /> <br /> Obrigado<br /> <br /> </p>
rigaspar Posted May 15, 2012 at 04:54 PM Author Report #455804 Posted May 15, 2012 at 04:54 PM (edited) aos bocadinho lá vou conseguindo.... Pronto já consigo retirar o que está entre parenteses rectos e inserir numa combobox. Agora tenho que ver como retirar os parenteses rectos para não aparecer no indexamento da combobox e apenas aparecer o que está entre eles, depois associar o index(0) ou index(1) à tecla OK. Nota se utilizar o strLine = strFile.Readline.Split("[") dá-me erro. Escrevi o erro no código em cima. Do While strFile.Peek() <> -1 'Utiliza Peek para ler o ficheiro até que não haja mais linhas strLine = strFile.ReadLine() If InStr(strLine, "[") > 0 Then strSection = strLine ComboBox1.Items.Add(strSection) End If Conseguem ajudar-me no que falta? Muitissimo obrigado Edited May 15, 2012 at 10:48 PM by Caça GeSHi
rigaspar Posted May 16, 2012 at 12:29 AM Author Report #455950 Posted May 16, 2012 at 12:29 AM (edited) Caros, Muito obrigado mas já consegui realizar o que queria. Venho por este meio partilhar o código completo e perguntar se detectam algum erro que me tenha escapado. O input do ficheiro é o rasphone.pbk e é composto da seguinte forma. [VPN ONE] Encoding=1 PBVersion=1 [VPN TWO] Encoding=1 PBVersion=1 [VPN TREE] Encoding=1 PBVersion=1 Portanto o ficheiro é igual a um ficheiro INI e o objectivo era criar um form com uma combobox e dois botões onde podemos seleccionar a vpn que queremos iniciar. O que o código tinha que fazer? É abrir e lêr todas as secções do ficheiro [ ] e inserir numa combobox. Depois seleccionar a secção e iniciar a VPN. O código que realizei é o seguinte: Public Class Form1 Dim namevpn As String Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim strFile As New IO.StreamReader("C:\ProgramData\Microsoft\Network\Connections\Pbk\rasphone.pbk") Do While strFile.Peek <> -1 Dim textline As String = strFile.ReadLine If textline.Contains("[") Then Dim section As String = textline.Remove(0, textline.IndexOf("[") + 1) section = section.Substring(0, section.IndexOf("]")) ComboBox1.Items.Add(section) End If Loop End Sub Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged 'Dim intSelectedindex As Integer 'intSelectedindex = ComboBox1.SelectedIndex Dim objselecteditem As Object objselecteditem = ComboBox1.SelectedItem 'MsgBox(intSelectedindex) 'MsgBox(objselecteditem.ToString()) namevpn = objselecteditem.ToString() End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Close() 'Process.Start("rasphone.exe", "-d " & Chr(34) & "VPN ONE" & Chr(34)) Process.Start("rasphone.exe", "-d " & Chr(34) & namevpn & Chr(34)) 'MsgBox(namevpn) End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Me.Close() End Sub End Class Obrigado a todos. Edited May 16, 2012 at 08:18 AM by Caça GeShi
rigaspar Posted May 16, 2012 at 12:32 AM Author Report #455951 Posted May 16, 2012 at 12:32 AM Caros, Muito obrigado mas já consegui realizar o que queria. Venho por este meio partilhar o código completo e perguntar se detectam algum erro que me tenha escapado. O input do ficheiro é o rasphone.pbk e é composto da seguinte forma. [VPN ONE] Encoding=1 PBVersion=1 [VPN TWO] Encoding=1 PBVersion=1 [VPN TREE] Encoding=1 PBVersion=1 Portanto o ficheiro é igual a um ficheiro INI e o objectivo era criar um form com uma combobox e dois botões onde podemos seleccionar a vpn que queremos iniciar. O que o código tinha que fazer? É abrir e lêr todas as secções do ficheiro [ ] e inserir numa combobox. Depois seleccionar a secção e iniciar a VPN. O código que realizei é o seguinte: Public Class Form1 Dim namevpn As String Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim strFile As New IO.StreamReader("C:\ProgramData\Microsoft\Network\Connections\Pbk\rasphone.pbk") Do While strFile.Peek <> -1 Dim textline As String = strFile.ReadLine If textline.Contains("[") Then Dim section As String = textline.Remove(0, textline.IndexOf("[") + 1) section = section.Substring(0, section.IndexOf("]")) ComboBox1.Items.Add(section) End If Loop End Sub Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged 'Dim intSelectedindex As Integer 'intSelectedindex = ComboBox1.SelectedIndex Dim objselecteditem As Object objselecteditem = ComboBox1.SelectedItem 'MsgBox(intSelectedindex) 'MsgBox(objselecteditem.ToString()) namevpn = objselecteditem.ToString() End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Close() 'Process.Start("rasphone.exe", "-d " & Chr(34) & "VPN ONE" & Chr(34)) Process.Start("rasphone.exe", "-d " & Chr(34) & namevpn & Chr(34)) 'MsgBox(namevpn) End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Me.Close() End Sub End Class Obrigado a todos.
jpaulino Posted May 16, 2012 at 06:52 AM Report #455956 Posted May 16, 2012 at 06:52 AM O problema que te estava a dar com o Split era porque tinhas de declarar como array e não como uma simples string. Dim Seccao() As String Mas se o conteúdo de uma linha é apenas "[VPN TREE]" (exemplo), podias simplesmente fazer o replace de "[" e de "]" por nada. Exmplo: Dim textline As String = strFile.ReadLine ComboBox1.Items.Add(textline.Replace("[", "").Replace("]", "")) 1 Report
rigaspar Posted May 17, 2012 at 08:39 PM Author Report #456531 Posted May 17, 2012 at 08:39 PM O problema que te estava a dar com o Split era porque tinhas de declarar como array e não como uma simples string. Dim Seccao() As String Mas se o conteúdo de uma linha é apenas "[VPN TREE]" (exemplo), podias simplesmente fazer o replace de "[" e de "]" por nada. Exmplo: Dim textline As String = strFile.ReadLine ComboBox1.Items.Add(textline.Replace("[", "").Replace("]", "")) Viva jpaulino, Também é uma ideia. Muito obrigado pela ajuda, brevemente terei um novo projecto e estarei cá para expor as minhas dúvidas... Obrigado
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