VB значение импорта из текста - PullRequest
0 голосов
/ 01 октября 2018

Допустим, у меня есть, например, простой трехстрочный текстовый файл, где указано, например:

FirstName=Adam
LastName=Smith
Age=25 

, но есть больше файлов с другим значением и / или шифруются, что LastName является первым, FirstNameвторой и т. д., поэтому приложение не должно зависеть от номера строки, а вместо этого читать слова из текста.

Я хочу, чтобы это приложение попало в файл, обнаружило, что Адам - ​​это имя, Смит - это фамилия, что возраст - 25 лет, и выдает его в виде строк, которые затем импортируются и немедленно назначаются соответствующимПеременная приложения (LastName = Смит присваивается переменной LastName в приложении и т. д.).

Надеюсь, вы меня поняли ... Трудно объяснить :-).Я могу попытаться дать дальнейшие объяснения, если вы не можете получить то, что я действительно хочу.

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Вот еще один возможный ответ, используя 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

The FirstName, LastNameВозраст будет выведен на консоль только тогда, когда каждый из них имеет свое значение.Таким образом, он пройдет проверку, запишет в консоль, после чего переменные будут сброшены и готовы к следующему набору из трех.Надеюсь, это поможет.

Вывод на консоль сверху:

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
0 голосов
/ 02 октября 2018

Вам нужно использовать некоторые строковые функции.Что вам нужно: Подстрока и 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
...