2009-12-13 20 views
5

Ich möchte, dass mein Programm bestimmten Text in einer Textdatei liest. Zum Beispiel, wenn ich eine Textdatei, die die folgenden Informationen enthält ..VB.NET Lesen bestimmter Text in einer Textdatei

acc=blah 
pass=hello 

ich meine vb.net Anwendung erhalten mag, dass das Konto Variable blah gleich ist, und das Kennwort Variable gleich hallo.

Kann mir jemand sagen, wie das geht?

Dank

Antwort

5

Hier ist eine schnelle wenig Code, der, nachdem Sie auf eine Schaltfläche klicken, wird:

  1. nehmen eine Eingabedatei (in diesem Fall, dass ich ein „Test genannt erstellt.ini ")
  2. Lese in den Werten als separate Linien
  3. eine Suche, reguläre Ausdrücke verwenden, um zu sehen, ob es einen enthält‚ACC =‘oder‚PASS =‘Parameter
  4. schreiben sie dann an die Konsole

hier ist der Code:

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

Dieser Code funktioniert beim Ausziehen der Parameter aus einer Textdatei gefragt.Devoting ist effektiv beim Aufzeigen eines Problems in einer Lösung.Aber Feedback sollte als gegeben werden gut, um zum Nutzen anderer zu arbeiten, die gepostete Antwort sowie den Antworter zu lesen. – Dostee

+0

Haben Sie einen Quellcode dafür? – lab12

+0

Nvm. über den Quellcode .. ich habe es zu arbeiten. Ich habe nur eine Frage Wie kann ich die Daten von den Gruppen (1) .... wo das Programm schreibt die Daten in eine Variable? – lab12

0

Sie können bestimmte Informationen in der Datei nicht wirklich selektiv lesen. Sie müssen jede Zeile der Datei scannen und am Anfang der Zeile nach der Zeichenfolge "pass =" suchen. Ich weiß VB nicht, aber diese Themen nachschlagen:

  1. Datei-Leser
  2. String Tokenizer/Splitting (espically diejenigen, die eine Zeile zu einem Zeitpunkt, lesen) (als Astander erwähnt)
  3. Datei-Lese Beispiele
1

Mein Vorschlag: Sie verwenden XML. Das .NET-Framework hat viele gute XML-Tools, wenn Sie bereit sind, den Übergang zu machen, um alle Textdateien in XML zu schreiben, wird es das Leben viel einfacher machen.

Nicht, was Sie suchen, wahrscheinlich, aber es ist eine sauberere Lösung als alles, was Sie mit Klartext tun könnten (außerhalb der Entwicklung eines eigenen Parser oder Verwendung einer niedrigeren Ebene API).

2

Sieht so aus, als hätten Sie eine INI-Datei ... Die beste Möglichkeit, diese zu lesen, ist die Verwendung der * PrivateProfile * -Funktionen der Windows-API, was bedeutet, dass Sie ganz einfach eine richtige vollständige INI-Datei haben können für alles was du brauchst. Es gibt eine Wrapper-Klasse here, die Sie gerne verwenden möchten.

Microsoft empfiehlt, dass Sie die Registrierung verwenden, um diese Art von Information jedoch zu speichern, und rät von Verwendung von INI-Dateien ab.

Wenn Sie nur eine Datei manuell mit der von Ihnen verwendeten Syntax verwenden möchten, ist es ein einfacher Fall, die Zeichenfolge auf '=' aufzuteilen und die Ergebnisse in ein Dictionary zu schreiben. Denken Sie daran, Fälle zu behandeln, in denen die Daten nicht in der Datei gefunden wurden und Sie einen Standard/Fehler benötigen. In der heutigen Zeit jedoch wird XML für Datentextdateien immer beliebter und es gibt viele Bibliotheken, die sich mit dem Laden von diesen befassen.

0

Haben Sie sich Gedanken über den Rahmen bekommen, anstatt sie zu handhaben

Wenn Sie auf der Registerkarte "Einstellungen" der Projekteigenschaften mit dem Namen "acc" einen Eintrag hinzufügen, "string", "scope" user (oder Anwendung, abhängig von den Anforderungen) und "value pass" eingeben, können Sie die System.Configuration.ApplicationSettingsBase-Funktion verwenden.

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 

Anruf GetSettings in welcher Ladeereignis Sie brauchen, und setSettings in Abschlussveranstaltungen

Dieser einen Eintrag in der application.exe.config-Datei erstellen wird, entweder in den lokalen Einstellungen \ Apps \ 2.0 \ etc usw., oder Ihr Roaming oder, wenn es sich um eine Clickonce-Bereitstellung handelt, im clickonce-Datenverzeichnis. Dies wird wie folgt aussehen: -

<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

Schreiben Sie Ihren eigenen Parser ist nicht so schwer. Ich habe es geschafft, eine für ein Spiel zu machen (mit C#, aber VB scheint auch Regex Klasse zu haben. Damit wäre die acc Variable in Ihrer Datei alles bis zum = Zeichen, und dann wäre blah alles vorbei an der = Newline-Zeichen (\n) Dann gehen Sie zur nächsten Zeile und wiederholen Sie den Vorgang