VB.NET读取文本文件中的某些文本

时间:2009-12-13 18:07:07

标签: vb.net visual-studio-2008 file text

我希望我的程序能够读取文本文件中的某些文本。例如,如果我有一个包含以下信息的文本文件..

acc=blah
pass=hello

我希望我的vb.net应用程序得到帐号变量等于blah,密码变量等于hello。

谁能告诉我怎么做?

由于

7 个答案:

答案 0 :(得分:5)

这是一小段代码,点击按钮后会显示:

  1. 获取一个输入文件(在本例中我创建了一个名为“test.ini”的文件)
  2. 将值作为单独的行读入
  3. 使用正则表达式进行搜索,以查看它是否包含任何“ACC =”或“PASS =”参数
  4. 然后将它们写入控制台
  5. 这是代码:

    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
    

答案 1 :(得分:3)

看一下这篇文章

Reading and writing text files with VB.NET

Wile逐行读取文件,您可以使用String.Split Method将分割器“=”,将字符串拆分为 param name param值

答案 2 :(得分:2)

看起来你有一个某种类型的INI文件......最好的方法是使用windows API的* PrivateProfile *函数,这意味着你可以很容易地获得一个正确的完整INI文件你需要什么。您可以使用包装类here

Microsoft建议您使用注册表来存储此类信息,并且不鼓励使用INI文件。

如果您希望仅使用您拥有的语法手动使用文件,则只需将字符串拆分为“=”并将结果放入字典即可。请记住处理在文件中找不到数据并且您需要默认/错误的情况。然而,在现代,XML正变得越来越流行于数据文本文件,并且有许多库来处理从这些文件加载​​。

答案 3 :(得分:1)

我的建议:你使用XML。 .NET框架有很多优秀的XML工具,如果你愿意转换为将所有文本文件放到XML中,它会让生活变得更轻松。

可能不是您正在寻找的东西,但它比使用纯文本(在开发自己的解析器或使用更低级别的API之外)所做的任何事情都更清晰。

答案 4 :(得分:0)

您无法专门有选择地读取文件中的某些信息。您必须扫描文件的每一行,并在行的开头搜索字符串“pass =”。我不知道VB,但查看这些主题:

  1. 文件阅读器(通常是一次可以读取一行的文件)
  2. 字符串标记器/拆分(如Astander所述)
  3. 文件阅读示例

答案 5 :(得分:0)

您是否考虑过让框架处理它?<​​/ p>

如果在项目属性的设置选项卡中添加一个名称为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文件中创建一个条目,可以在本地settings \ apps \ 2.0 \ etc 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>

答案 6 :(得分:0)

编写自己的解析器并不难。我设法为游戏制作一个(使用C#,但VB似乎也有Regex类。使用它,文件中的acc变量将是=符号之前的所有内容,然后blah将是=到换行符后的所有内容(\n)然后转到下一行并重复。