Jump to content

Recommended Posts

Posted

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

Posted

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.

Posted

<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>

Posted (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 by Caça
GeSHi
Posted (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 by Caça
GeShi
Posted

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.

Posted

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("]", ""))
  • Vote 1
Posted

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.