2009-12-13 8 views
5

Voglio che il mio programma legga determinati testi in un file di testo. Per esempio se ho un file di testo contenente le seguenti informazioni ..VB.NET Legge alcuni testi in un file di testo

acc=blah 
pass=hello 

Voglio la mia domanda vb.net per ottenere che la variabile conto è pari a bla, e la variabile password è pari a ciao.

Qualcuno può dirmi come si fa?

Grazie

risposta

5

Qui è un po 'rapido di codice che, dopo aver fatto clic su un pulsante, sarà:

  1. prendere un file di input (in questo caso ho creato uno chiamato "test.ini ")
  2. lettura nei valori come linee separate
  3. fare una ricerca, utilizzando le espressioni regolari, per vedere se contiene 'ACC =' o 'PASS =' Parametri
  4. poi scrivere al console

ecco il codice:?

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

Questo codice funziona nella definizione dei parametri richiesti da un file di testo. Il downvoting è efficace nel segnalare un problema in una soluzione. bene al fine di elaborare per il beneficio di altri che leggono la risposta postata così come il rispondente – Dostee

+0

Hai un codice sorgente per questo? – lab12

+0

Nvm. sul codice sorgente .. ho avuto modo di funzionare. Ho solo una domanda Come posso tenere i dati da m.groups (1) .... dove il programma scrive i dati in una variabile? – lab12

0

Non è possibile leggere in modo selettivo un determinato bit di informazioni nel file esclusivamente. Dovrai scansionare ogni riga del file ed eseguire una ricerca per la stringa "pass =" all'inizio della riga. Non so VB, ma guardo su questi argomenti:

  1. lettori di file (espically quelli in grado di leggere una riga alla volta)
  2. tokenizers String/splitting (come detto Astander)
  3. esempi di lettura della lima
1

Il mio suggerimento: si utilizza XML. Il framework .NET ha molti buoni strumenti XML, se sei disposto a fare la transizione per mettere tutti i file di testo in XML, renderà la vita molto più semplice.

Non è quello che stai cercando, probabilmente, ma è una soluzione più pulita di qualsiasi cosa tu possa fare con testo semplice (al di fuori di sviluppare il tuo parser o usare un'API di livello inferiore).

2

Sembra che tu abbia un file INI di qualche tipo ... Il modo migliore per leggerli è usare le funzioni * PrivateProfile * dell'API di Windows, il che significa che puoi effettivamente avere un file INI completo corretto abbastanza facilmente per tutto ciò di cui hai bisogno. C'è una classe wrapper here che potresti voler utilizzare.

Microsoft consiglia di utilizzare il Registro di sistema per archiviare questo tipo di informazioni e scoraggia l'utilizzo dei file INI.

Se si desidera utilizzare manualmente un file con la sintassi, è sufficiente dividere la stringa su "=" e inserire i risultati in un dizionario. Ricordati di gestire casi in cui i dati non sono stati trovati nel file e hai bisogno di un default/errore. Nei tempi moderni però, XML sta diventando molto più popolare per i file di testo di dati e ci sono molte librerie per gestire il caricamento da questi.

0

avete pensato di ottenere il quadro di gestirlo invece

Se si aggiunge una voce nella scheda delle impostazioni delle proprietà del progetto con nome acc, tipo string, scope utente (o applicazione, in base ai requisiti) e value pass, è possibile utilizzare la funzionalità System.Configuration.ApplicationSettingsBase per gestirla.

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 chiamata a qualsiasi evento di carico è necessario, e setSettings in eventi di chiusura

questo creerà una voce nel file application.exe.config, sia nelle impostazioni locali \ apps \ 2.0 \ etc directory etc, o roaming, o se si tratta di una distribuzione clickonce, nella directory dei dati clickonce. Questo sarà simile al seguente: -

<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

Scrivere il proprio parser non è difficile. Sono riuscito a crearne uno per un gioco (Usando C#, ma VB sembra avere anche la classe Regex. Usando questo, la variabile acc nel tuo file sarebbe tutto fino al segno =, e quindi blah sarebbe tutto oltre lo = carattere di nuova riga (\n) Quindi vai alla riga successiva e ripeti.

Problemi correlati