VB 从文本中导入值
VB import value from text
假设我有一个简单的三行文本文件,例如:
FirstName=Adam
LastName=Smith
Age=25
但是有更多具有不同值 and/or 的文件被打乱,姓氏在第一位,名字在第二位等等,因此应用程序不能依赖于行号,而是从文本中读取单词。
我希望该应用程序进入文件,检测 Adam 是名字,Smith 是姓氏,年龄是 25 岁并将其输出为字符串,然后将其导入并立即分配给适当的应用程序内变量(LastName=Smith 在 App 等中分配给 LastName 变量)。
我希望你理解我..很难解释:-)。如果你不能得到我真正想要的,我可以尝试提供进一步的解释。
提前致谢
您需要使用一些字符串函数。你需要的是Substring and IndexOf。 Substring
用于获取字符串的某一部分。 IndexOf
用于获取字符串中某部分的位置。所以你需要得到等号在哪里,然后将等号前后的字符串分开。等号前一位是属性名称,等号后一位是属性值。
Sub Main
Dim firstName As String = "", lastName As String = "", age As Integer
For Each line In File.ReadLines("C:\input.txt")
Dim equalSignIndex = line.IndexOf("=")
Dim propertyName = line.Substring(0, equalSignIndex)
Dim propertyValue = line.Substring(equalSignIndex + 1, line.Length - equalSignIndex - 1)
Select Case propertyName
Case "FirstName" :
firstName = propertyValue
Case "LastName" :
lastName = propertyValue
Case "Age" :
age = propertyValue
End Select
Next
Console.WriteLine("Name = {0} {1}, Age = {2}", firstName, lastName, age)
End Sub
这是另一个可能的答案,使用 line.Split
可能是合适的。我考虑到你的文本文件格式可能有点乱所以我制作了一个文本文件input.txt
作为测试,它的内容是这样的:
FirstName=Adam
LastName=Smith
Age=25
lastName=Smith2
FirstName=Adam2
Age=35
age=45
Firstname=Adam3
LastName=Smith3
firstname=Adam4
LastName=Smith4
Age=55
FirstName=Adam5
LastName=Smith5
Age=65
如您所见,我故意把一些东西的顺序弄错了,添加了换行符,并且为了更好的措施还弄乱了字符大小写。
代码:
Dim firstName As String = String.Empty, lastName As String = String.Empty, age As Integer = 0
For Each line In File.ReadLines("C:\input.txt")
If line.Contains("=") Then
Dim TxtSplit() As String = line.Split("="c)
Select Case TxtSplit(0).ToLower
Case "firstname" : firstName = TxtSplit(1)
Case "lastname" : lastName = TxtSplit(1)
Case "age" : age = Integer.Parse(TxtSplit(1))
End Select
End If
If Not String.IsNullOrEmpty(firstName) AndAlso Not String.IsNullOrEmpty(lastName) AndAlso Not age = 0 Then
Console.WriteLine("Name: {0} {1}, Age: {2}", firstName, lastName, age)
firstName = String.Empty : lastName = String.Empty : age = 0
End If
Next
FirstName、LastName、Age 仅在各自具有其值后才会打印到控制台。所以它将通过检查,写入控制台,然后变量将重置为下一组三个准备就绪。希望对你有帮助。
上面的控制台输出:
Name: Adam Smith, Age: 25
Name: Adam2 Smith2, Age: 35
Name: Adam3 Smith3, Age: 45
Name: Adam4 Smith4, Age: 55
Name: Adam5 Smith5, Age: 65
假设我有一个简单的三行文本文件,例如:
FirstName=Adam
LastName=Smith
Age=25
但是有更多具有不同值 and/or 的文件被打乱,姓氏在第一位,名字在第二位等等,因此应用程序不能依赖于行号,而是从文本中读取单词。
我希望该应用程序进入文件,检测 Adam 是名字,Smith 是姓氏,年龄是 25 岁并将其输出为字符串,然后将其导入并立即分配给适当的应用程序内变量(LastName=Smith 在 App 等中分配给 LastName 变量)。
我希望你理解我..很难解释:-)。如果你不能得到我真正想要的,我可以尝试提供进一步的解释。
提前致谢
您需要使用一些字符串函数。你需要的是Substring and IndexOf。 Substring
用于获取字符串的某一部分。 IndexOf
用于获取字符串中某部分的位置。所以你需要得到等号在哪里,然后将等号前后的字符串分开。等号前一位是属性名称,等号后一位是属性值。
Sub Main
Dim firstName As String = "", lastName As String = "", age As Integer
For Each line In File.ReadLines("C:\input.txt")
Dim equalSignIndex = line.IndexOf("=")
Dim propertyName = line.Substring(0, equalSignIndex)
Dim propertyValue = line.Substring(equalSignIndex + 1, line.Length - equalSignIndex - 1)
Select Case propertyName
Case "FirstName" :
firstName = propertyValue
Case "LastName" :
lastName = propertyValue
Case "Age" :
age = propertyValue
End Select
Next
Console.WriteLine("Name = {0} {1}, Age = {2}", firstName, lastName, age)
End Sub
这是另一个可能的答案,使用 line.Split
可能是合适的。我考虑到你的文本文件格式可能有点乱所以我制作了一个文本文件input.txt
作为测试,它的内容是这样的:
FirstName=Adam
LastName=Smith
Age=25
lastName=Smith2
FirstName=Adam2
Age=35
age=45
Firstname=Adam3
LastName=Smith3
firstname=Adam4
LastName=Smith4
Age=55
FirstName=Adam5
LastName=Smith5
Age=65
如您所见,我故意把一些东西的顺序弄错了,添加了换行符,并且为了更好的措施还弄乱了字符大小写。
代码:
Dim firstName As String = String.Empty, lastName As String = String.Empty, age As Integer = 0
For Each line In File.ReadLines("C:\input.txt")
If line.Contains("=") Then
Dim TxtSplit() As String = line.Split("="c)
Select Case TxtSplit(0).ToLower
Case "firstname" : firstName = TxtSplit(1)
Case "lastname" : lastName = TxtSplit(1)
Case "age" : age = Integer.Parse(TxtSplit(1))
End Select
End If
If Not String.IsNullOrEmpty(firstName) AndAlso Not String.IsNullOrEmpty(lastName) AndAlso Not age = 0 Then
Console.WriteLine("Name: {0} {1}, Age: {2}", firstName, lastName, age)
firstName = String.Empty : lastName = String.Empty : age = 0
End If
Next
FirstName、LastName、Age 仅在各自具有其值后才会打印到控制台。所以它将通过检查,写入控制台,然后变量将重置为下一组三个准备就绪。希望对你有帮助。
上面的控制台输出:
Name: Adam Smith, Age: 25
Name: Adam2 Smith2, Age: 35
Name: Adam3 Smith3, Age: 45
Name: Adam4 Smith4, Age: 55
Name: Adam5 Smith5, Age: 65