问题描述
我有一个包含多行的配置文件。
DataBaseType =1
ServerName=LAPTOP-XXXX
Database=mydatabase
Connection Timeout=3000
User ID=sa
Password=sasa
ServerIp=xxxx:8083
ServiceType=http://
Backup Driver=D:\
Backup Folder=SWBACKUP
Database Restore=D:\
现在我想通过读取、拆分和连接文本来生成一个字符串,它将是一个 sqlconnection 字符串。应该是
"Data Source=LAPTOP-XXXX;Initial Catalog=mydatabase;User ID=sa;Password=sasa"
我可以使用 streamreader 阅读文本,但我无法拆分和合并这些文本。
解决方法
您可以创建一个方法,将您的配置文件转换为 Dictionary(Of String,String)
,然后根据需要获取值。
看看这个例子:
Private Function ReadConfigFile(path As String) As Dictionary(Of String,String)
If (String.IsNullOrWhiteSpace(path)) Then
Throw New ArgumentNullException("path")
End If
If (Not IO.File.Exists(path)) Then
Throw New ArgumentException("The file does not exist.")
End If
Dim config = New Dictionary(Of String,String)
Dim lines = IO.File.ReadAllLines(path)
For Each line In lines
Dim separator = line.IndexOf("=")
If (separator < 0 OrElse separator = line.Length - 1) Then
Throw New Exception("The following line is not in a valid format: " & line)
End If
Dim key = line.Substring(0,separator)
Dim value = line.Substring(separator + 1)
config.Add(key,value)
Next
Return config
End Function
示例:Live Demo
这个函数的作用是:
- 确保给出了路径
- 确保文件作为给定路径存在
- 遍历每一行
- 确保该行的格式正确(键=值)
- 将键/值附加到字典中
您可以使用 readline
方法,然后对数据库行进行如下操作:
Dim reader As New StreamReader(filetoimport.Txt,Encoding.Default)
Dim strLine As String
Do
' Use ReadLine to read from your file line by line
strLine = reader.ReadLine
Dim retString As String
'to get the string from position 0 length 8
retString = strLine .Substring(0,8)
'check if match
if retString ="Database" Then
Dim valueString As String
valueString = strLine .Substring(9,strLine.length)
...
Loop Until strLine Is Nothing