2009-12-13 28 views
5

Quiero que mi programa lea cierto texto en un archivo de texto. Por ejemplo si tengo un archivo de texto que contiene la siguiente información ..VB.NET Leer Cierto texto en un archivo de texto

acc=blah 
pass=hello 

Quiero mi solicitud vb.net para conseguir que la variable de cuenta es igual bla, y la variable contraseña es igual a saludar.

¿Alguien me puede decir cómo hacerlo?

Gracias

Respuesta

5

Aquí es un poco más rápida de código que, después de hacer clic en un botón, hará lo siguiente:

  1. tomar un archivo de entrada (en este caso he creado una llamada "prueba.ini ")
  2. de lectura en los valores como líneas separadas
  3. hacer una búsqueda, el uso de expresiones regulares, para ver si contiene cualquier 'ACC =' o 'pass =' ​​parámetros
  4. continuación escribirlos en la consola

aquí está el código:?

Imports System.IO 
Imports System.Text.RegularExpressions 

Public Class Form1 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    Dim strFile As String = "Test.INI" 
    Dim sr As New StreamReader(strFile) 
    Dim InputString As String 

    While sr.Peek <> -1 
     InputString = sr.ReadLine() 
     checkIfContains(InputString) 
     InputString = String.Empty 
    End While 
    sr.Close() 
End Sub 

Private Sub checkIfContains(ByVal inputString As String) 
    Dim outputFile As String = "testOutput.txt" 
    Dim m As Match 
    Dim m2 As Match 
    Dim itemPattern As String = "acc=(\S+)" 
    Dim itemPattern2 As String = "pass=(\S+)" 

    m = Regex.Match(inputString, itemPattern, _ 
        RegexOptions.IgnoreCase Or RegexOptions.Compiled) 
    m2 = Regex.Match(inputString, itemPattern2, _ 
        RegexOptions.IgnoreCase Or RegexOptions.Compiled) 
    Do While m.Success 
     Console.WriteLine("Found account {0}", _ 
          m.Groups(1), m.Groups(1).Index) 
     m = m.NextMatch() 
    Loop 
    Do While m2.Success 
     Console.WriteLine("Found password {0}", _ 
          m2.Groups(1), m2.Groups(1).Index) 
     m2 = m2.NextMatch() 
    Loop 
End Sub 

End Class 
+0

Este código funciona al extraer los parámetros solicitados de un archivo de texto. La reducción de la validez es efectiva al señalar un problema en una solución. bien para elaborar en beneficio de otros leyendo la respuesta publicada, así como el contestador. – Dostee

+0

¿Tiene un código fuente para esto? – lab12

+0

Nvm. sobre el código fuente ... lo tengo que trabajar. Solo tengo una pregunta . ¿Cómo puedo mantener los datos de m.groups (1) ... donde el programa escribe los datos en, en una variable? – lab12

0

No se puede leer de manera selectiva un determinado tipo de información en el archivo exclusivamente. Tendrá que escanear cada línea del archivo y hacer una búsqueda de la cadena "pass =" al comienzo de la línea. No sé VB pero mira estos temas:

  1. lectores de archivos (espically los que pueden leer una línea a la vez)
  2. tokenizers Cuerda/división (como se ha mencionado Astander)
  3. ejemplos de lectura del archivo
1

Mi sugerencia: utiliza XML. El .NET Framework tiene muchas buenas herramientas XML, si está dispuesto a hacer la transición para poner todos los archivos de texto en XML, hará la vida mucho más fácil.

No es lo que está buscando, probablemente, pero es una solución más limpia que cualquier otra cosa que pueda hacer con texto sin formato (aparte de desarrollar su propio analizador o utilizar un API de nivel inferior).

2

Parece que tiene un archivo INI de algún tipo ... La mejor manera de leer esto es usar las funciones * PrivateProfile * de la API de Windows, lo que significa que realmente puede tener un archivo INI completo adecuado con bastante facilidad para cualquier cosa que necesites Existe una clase de contenedor here que le puede interesar.

Microsoft recomienda que utilice el registro para almacenar este tipo de información y desalienta el uso de archivos INI.

Si desea simplemente usar un archivo manualmente con la sintaxis que tiene, es un simple caso de dividir la cadena en '=' y poner los resultados en un diccionario. Recuerde manejar los casos donde los datos no se encontraron en el archivo y necesita un error/defecto. En los tiempos modernos, sin embargo, XML se está volviendo mucho más popular para los archivos de texto de datos, y hay muchas bibliotecas para lidiar con la carga de estos.

0

¿Ha pensado en hacerse el marco de manejarlo en vez

Si agrega una entrada en la pestaña de configuración de las propiedades del proyecto con el nombre acc, escriba string, usuario de ámbito (o aplicación, según los requisitos) y pase de valor, puede usar la funcionalidad System.Configuration.ApplicationSettingsBase para manejarlo.

Private _settings As My.MySettings 
    Private _acc as String 
    Private _pass as String 
    Public ReadOnly Property Settings() As System.Configuration.ApplicationSettingsBase 
     Get 
      If _settings Is Nothing Then 
       _settings = New My.MySettings 
      End If 
      Return _settings 
     End Get 
    End Property 
    Private Sub SetSettings() 
     Settings.SettingsKey = Me.Name 
     Dim theSettings As My.MySettings 
     theSettings = DirectCast(Settings, My.MySettings) 
     theSettings.acc=_acc 
     theSettings.pass=_pass   
     Settings.Save() 
    End Sub 
    Private Sub GetSettings() 
     Settings.SettingsKey = Me.Name 
     Dim theSettings As My.MySettings 
     theSettings = DirectCast(Settings, My.MySettings) 
     _acc=theSettings.acc 
     _pass=theSettings.pass 
    End Sub 

GetSettings de llamadas en cualquier evento de carga que necesita, y SetSettings en eventos de cierre

Esto creará una entrada en el archivo application.exe.config, ya sea en su configuración local \ apps \ 2.0 \ etc etc., o su itinerancia, o si se trata de una implementación de clickonce, en el directorio de datos de clickonce. Esto se verá así: -

<userSettings> 
     <MyTestApp.My.MySettings> 
      <setting name="acc" serializeAs="String"> 
       <value>blah</value> 
      </setting> 
     <setting name="pass" serializeAs="String"> 
       <value>hello</value> 
     </setting> 
    </MyTestApp.My.MySettings> 
    </userSettings> 
0

Escribir su propio analizador no es tan difícil. Logré hacer uno para un juego (Usando C#, pero VB parece tener también clase Regex. Usando eso, la variable acc en su archivo sería todo hasta el = signo, y luego blah sería todo más allá del = al carácter de nueva línea (\n) Luego vaya a la línea siguiente y repítalo

Cuestiones relacionadas