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

VB.NET读取文本文件中的某些文本,vb.net,visual-studio-2008,file,text,Vb.net,Visual Studio 2008,File,Text,我想让我的程序读取文本文件中的某些文本。例如,如果我有一个包含以下信息的文本文件 acc=blah pass=hello 我希望我的vb.net应用程序得到account变量等于blah,password变量等于hello 谁能告诉我怎么做 谢谢看看这篇文章 在逐行读取文件时,您可以使用拆分器“=”,将字符串拆分为参数名称和参数值。您不能真正有选择性地以独占方式读取文件中的特定信息。您必须扫描文件的每一行,并搜索该行开头的字符串“pass=”。我不知道VB,但可以查找以下主题: 文件阅读器(

我想让我的程序读取文本文件中的某些文本。例如,如果我有一个包含以下信息的文本文件

acc=blah
pass=hello
我希望我的vb.net应用程序得到account变量等于blah,password变量等于hello

谁能告诉我怎么做


谢谢

看看这篇文章


在逐行读取文件时,您可以使用拆分器“=”,将字符串拆分为参数名称和参数值。

您不能真正有选择性地以独占方式读取文件中的特定信息。您必须扫描文件的每一行,并搜索该行开头的字符串“pass=”。我不知道VB,但可以查找以下主题:

  • 文件阅读器(尤其是一次只能读取一行的阅读器)
  • 字符串标记器/拆分(如Astander所述)
  • 文件读取示例

  • 我的建议是:使用XML。NET framework有很多很好的XML工具,如果您愿意转换为将所有文本文件转换为XML,这将使您的生活更加轻松


    可能不是您想要的,但它是一个比纯文本更干净的解决方案(除了开发您自己的解析器或使用较低级别的API)。

    看起来您有某种INI文件。。。读取这些文件的最佳方法是使用windows API的*PrivateProfile*函数,这意味着您可以很容易地为您需要的任何内容创建一个适当的完整INI文件。您可能喜欢使用一个包装器类

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


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

    下面是一段简短的代码,单击按钮后,它将:

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

    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
    
    Imports System.IO
    导入System.Text.RegularExpressions
    公开课表格1
    私有子按钮1\u单击(ByVal sender作为System.Object,ByVal e作为System.EventArgs)处理按钮1。单击
    将strFile设置为String=“Test.INI”
    Dim sr作为新的StreamReader(strFile)
    将输入字符串设置为字符串
    而老皮克-1
    InputString=sr.ReadLine()
    checkIfContains(InputString)
    InputString=String.Empty
    结束时
    高级关闭()
    端接头
    私有子checkIfContains(ByVal inputString作为字符串)
    Dim outputFile为String=“testOutput.txt”
    把我当作对手
    将m2调暗为匹配
    Dim itemPattern为String=“acc=(\S+)”
    将itemPattern2设置为String=“pass=(\S+)”
    m=Regex.Match(inputString,itemPattern_
    RegexOptions.IgnoreCase或RegexOptions.Compiled)
    m2=Regex.Match(inputString,itemPattern2_
    RegexOptions.IgnoreCase或RegexOptions.Compiled)
    当m.成功的时候做什么
    Console.WriteLine(“找到的帐户{0}”)_
    m、 组(1),m.组(1.索引)
    m=m.NextMatch()
    环
    做一个成功的人
    Console.WriteLine(“找到密码{0}”)_
    m2.组(1),m2.组(1.指数)
    m2=m2.NextMatch()
    环
    端接头
    末级
    
    您是否考虑过让框架来处理它

    如果在项目属性的“设置”选项卡中添加名为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>
    
    
    废话
    你好
    
    编写自己的解析器并不难。我设法为一个游戏制作了一个(使用C#,但是VB似乎也有
    Regex
    类。使用它,文件中的
    acc
    变量将是
    =
    符号之前的所有内容,然后
    blah
    将是通过
    =
    到换行符(
    \n
    )之后的所有内容然后转到下一行并重复。

    此代码用于从文本文件中提取所需的参数。向下投票可以有效地指出解决方案中的问题。但也应该给出反馈,以便其他人阅读张贴的答案以及有关源代码的answerer.Nvm。我得到了我只有一个问题。我如何将程序写入的m.groups(1)中的数据保存到变量中?用一个holder替换console.writeline,例如,您可以使用字符串数组-类似于:myArray(I)=“找到密码{0}”&m2.groups(1)&m2.groups(1).IndexHere是一个确切的错误:没有为类型“String”和“System.Text.RegularExpressions.Group”定义运算符“&”。组“Man-你需要去享受圣诞节!哈哈-我们使用“+”(加号)运算符而不是“&”。如果由于某种奇怪的原因无法工作,你也可以使用String.concat()函数。比如,myArray=String.concat(m2.groups(1),m2.gro