我希望我的程序能够读取文本文件中的某些文本。例如,如果我有一个包含以下信息的文本文件..
acc=blah
pass=hello
我希望我的vb.net应用程序得到帐号变量等于blah,密码变量等于hello。
谁能告诉我怎么做?
由于
答案 0 :(得分: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,但查看这些主题:
答案 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
)然后转到下一行并重复。