2009-12-13 58 views
5

VB.NET閱讀某些文字我想我的程序讀取文本文件中的某些文本。例如,如果我有一個包含以下信息的文本文件..在一個文本文件

acc=blah 
pass=hello 

我希望我的vb.net應用程序來獲得該帳戶變量等於胡說,和密碼變量等於你好。

誰能告訴我如何做到這一點?

感謝

回答

5

這裏的代碼,你點擊一個按鈕,就會在那之後,快速點點:

  1. 需要輸入文件(在這種情況下,我創建了一個名爲「測試。INI「)
  2. 讀取中的值作爲單獨的行
  3. 執行搜索,使用正則表達式,以查看它是否包含任何‘ACC =’或‘PASS =’參數
  4. 然後將其寫入到控制檯

這裏是代碼:

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

此代碼用於繪製文本文件中要求的參數Downvoting有效指出解決方案中的問題,但反饋應以以及以精巧爲他人閱讀張貼的答案以及回答者的利益。 – Dostee 2009-12-14 15:47:51

+0

你有這個源代碼嗎? – lab12 2009-12-24 02:30:29

+0

NVM。關於源代碼..我得到它的工作。我只是有一個問題。我怎樣才能保存m.groups(1)....中的數據程序將數據寫入變量? – lab12 2009-12-24 03:02:50

0

你真的不能選擇性地讀取信息的某一位專門的文件中。您必須掃描文件的每一行,並在行首搜索字符串「pass =」。我不知道VB,但查找這些主題:

  1. 文件閱讀器(espically那些可以一次讀取一行)
  2. 字符串斷詞/分裂(如Astander提到)
  3. 文件中讀取實例
1

我的建議是:使用XML。 .NET框架有很多很好的XML工具,如果你願意把所有的文本文件轉換成XML,它會讓生活變得更容易。

不是你要找的東西,可能是,但它比任何你可以用純文本(在開發你自己的解析器或使用低級別的API之外)可以做的任何事情都更清潔。

2

看起來你已經有了某種類型的INI文件...閱讀這些文件的最好方法是使用Windows API的PrivateProfile函數,這意味着你可以很容易地擁有一個合適的完整INI文件爲你需要的任何東西。您可能會喜歡使用包裝類here

Microsoft建議您使用註冊表來存儲此類信息,但不鼓勵使用INI文件。

如果您希望只使用您使用的語法手動創建文件,那麼將字符串拆分爲'='並將結果放入字典中是一種簡單的情況。請記住處理在文件中找不到數據的情況,並且您需要默認/錯誤。然而,在現代,XML在數據文本文件中變得越來越流行,並且有很多庫可以處理來自這些文件的加載。

0

你有沒有想過讓框架來處理它,而不是

如果一個條目添加到與名稱ACC,字符串類型,範圍的用戶(或應用程序,這取決於需求)和值傳遞項目屬性的設置選項卡中,你可以使用System.Configuration.ApplicationSettingsBase功能來對付它。在任何你需要的負載事件

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,並SetSettings在關閉事件

這將創建在application.exe.config文件中的條目,無論是在本地設置\ APPS \ 2.0 \等etc目錄,或您的漫遊一個,或者如果它是一個ClickOnce部署,在ClickOnce的數據目錄。這將如下所示: -

<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

編寫自己的解析器並不難。我設法爲遊戲製作一個遊戲(使用C#,但VB似乎也有Regex類。使用這個,你的文件中的acc變量將是所有符號,直到=符號,然後blah將會是所有符合=換行符(\n)然後轉到下一行並重復執行