VB从文本导入值

时间:2018-10-01 17:12:34

标签: vb.net text-files text-parsing

假设我有一个简单的三行文本文件,例如:

FirstName=Adam
LastName=Smith
Age=25 

,但是有更多具有不同值的文件和/或被混淆为姓氏为第一,名字为第二等,因此该应用程序不得依赖行号,而应从文本中读取单词。

我希望该应用进入文件,检测亚当是名字,史密斯是姓氏,年龄为25,然后将其输出为字符串,然后导入并立即分配给相应的应用内变量( LastName = Smith被分配给App等中的LastName变量。)

我希望你理解我..这很难解释:-)。如果您无法获得我真正想要的东西,我可以尝试提供进一步的解释。

预先感谢

2 个答案:

答案 0 :(得分:0)

您需要使用一些字符串函数。您需要的是SubstringIndexOfSubstring用于获取字符串的特定部分。 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

答案 1 :(得分:0)

这是另一个可能的答案,可能使用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才会打印到Console。因此它将通过检查,写入控制台,然后变量将重置为下一组三个变量做好准备。希望对您有所帮助。

控制台输出从上方:

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