2016-11-30 3 views
-1

У меня есть текстовый файл, который выглядит следующим образом. Я пытаюсь создать таблицу данных из формата. Я попробовал несколько различных вещей, чтобы отформатировать его правильно, однако я имею вопрос с ReadLinevb.net textfile ReadLine Loops

Dim SectionLineONE as string 
Dim NextSectionLine As String 

srReader = File.OpenText(MyFile) 

      Dim SectionLineONE As String 
    Do 
     SectionLineONE = srReader.ReadLine() 

      If SectionLineONE Is Nothing Then Exit Do 
      If SectionLineONE.Contains("1.0") Then 

       Dim NextSectionLine As String 
       Do 

        NextSectionLine = srReader.ReadLine() 

        If NextSectionLine Is Nothing Then Exit Do 
        If NextSectionLine.Contains("1.1") Then 

         Dim NextSectionLine3 As String 
         Do 

          NextSectionLine3 = srReader.ReadLine() 

          If NextSectionLine Is Nothing Then Exit Do 
         If NextSectionLine.Contains("1.1.1") Then 

          Dim NextSectionLine4 As String 
          Do 

           NextSectionLine4 = srReader.ReadLine() 

           If NextSectionLine Is Nothing Then Exit Do 
           If NextSectionLine.Contains("1.1.1.1") Then 

            'I want the program to go to the first do loop now and check 2.0, 2.1 etc 



           End If 
          Loop 


         End If 
        Loop 

       End If 

      Loop 
     End If 
    Loop 





    Text File 

1.0 
Section 1 Title: 
1.1 
Section Title 
1.1.1 
Section Title 
1.1.1.1 
Section Title 
+1

Как это отличается от [вашего последнего вопроса] (http://stackoverflow.com/q/40897137/1070452) ??? – Plutonix

+0

@Plutonix ... и мы не можем закрыть его как дуп. – LarsTech

+0

Это другое, потому что я добавил, как я добираюсь до 1.1.1.1. Как только программа прочитает 1.1.1.1, как я могу получить ее в моем первом цикле do. Никогда не отвечал – codeMonger123

ответ

1

Я хотел бы сделать что-то вроде этого предполагая, что файл выглядит так, что она выглядит, что все время: никаких дополнительных строк комментариев , 1 часть данных и в порядке:

Dim ver As New System.Version 

Dim data = File.ReadAllLines("C:\Temp\SockpuppetData.txt") 
Dim verData As New Dictionary(Of Version, String) 

Dim ndx As Int32 = 0 
Do Until ndx >= data.Count - 1 
    If String.IsNullOrEmpty(data(ndx)) = False Then 
     If System.Version.TryParse(data(ndx), ver) Then 
      ndx += 1 
      verData.Add(ver, data(ndx)) 
     End If 
    End If 
    ndx += 1 
Loop 

' debug 
For Each kvp In verData 
    Console.WriteLine("v: {0} t:{1}", kvp.Key, kvp.Value) 
Next 

В конце вы получите словарь объектов версии и связанный с ним текст. Если имеется более одной строки текста, используйте Dictionary(Of Version, String()). Если они не в порядке, используйте List(Of KeyValuePair(of Version, String)) и отсортируйте их после этого.

Тогда это всего лишь вопрос их склеивания. Результаты:

V: 1,0 т: Раздел 1 Название:
v: 1,1 т: Название раздела
v: 1.1.1 т: Раздел Название
V: 1.1.1.1 т: Раздел Название
v: 2,0 т: Название раздела:
v: 2,1 т: Название раздела
v: 2.1.1 т: Название раздела
v: 2.1.1.1 т: Название раздела

Rat ее, чем пытаться перейти от начала до конца за один цикл/шаг, собрать данные в нечто, с чем вы можете работать: сортировать, подсчитывать, сравнивать и т. д. Тип Version позволит вам сравнивать и определять вещи. Затем создайте свой вывод из этого.

Данные образца кажутся немного однородными. Например, нет ничего похожего на 1.2, который испортил бы названия. Наборы также имеют тот же размер между 1.x и 2.x, который позволяет этим заголовкам выстраиваться случайно. Если бы они были в списке, вы могли бы подсчитать глубину, чтобы знать, сколько Subs добавить.