Чтение файла и вывод в два списка - PullRequest
0 голосов
/ 12 декабря 2018

Я использую Imports System.IO и StreamReader в приложении Windows Forms.

Я пытаюсь взять файл, прочитать его и вывести его в два списка.Текстовый файл отформатирован следующим образом.

Blue, 23.7
Green, 60.1
Black, 45.3

Я хочу вывести цвета, которые имеют более высокое значение, чем 50, в один список, а те, что ниже, в другой.Пока все, что я сделал, это вывел весь список в текстовое поле.Код для этого выглядит следующим образом:

srTextFile = File.OpenText(dataFile)

Do While srTextFile.EndOfStream = False
    'read file by line, use the comma as a splitter
    thisFile = srTextFile.ReadLine().Split(",")
    For i As Integer = 0 To thisFile.GetUpperBound(0)
        txtFileDisplay.AppendText(thisFile(i) &vbTab)
    Next
    txtFileDisplay.AppendText(vbCrLf)
Loop

Я совершенно новичок в чтении файлов.Я действительно не знаю, что я делаю.Я довольно плохо знаком с массивами.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Используя класс, вы можете создавать объекты, содержащие имена цветов, а также двойное значение, и добавлять их в списки.

Public Class ColorValue
    Public Property Name As String
    Public Property Value As Double

    Public Overrides Function ToString() As String
        Return $"{Name} ({Value})"
    End Function
End Class

Обратите внимание, что я переопределил ToString, потому что ListBox использует его для отображения текста для каждого элемента.

Теперь вы можете добавлять цвета в списки, как это

For Each line As String In File.ReadLines(dataFile)
    Dim parts As String() = line.Split(","c)
    If parts.Length = 2 Then 'If line is well-shaped.
        Dim value As Double
        Double.TryParse(Trim(parts(1)), value) 'Gets 0 into value if conversion fails.
        Dim color = New ColorValue With {.Name = parts(0), .Value = value}
        If value > 50.0 Then
            listBox1.Items.Add(color)
        Else
            listBox2.Items.Add(color)
        End If
    End If
Next

Теперь вы можете получить значение цвета обратно с помощью

Dim c As ColorValue = DirectCast(listBox1.SelectedItem, ColorValue)
Dim n As String = c.Name
Dim v As Double = c.Value
0 голосов
/ 12 декабря 2018

Вы можете использовать класс System.IO.File, чтобы сделать это

  1. Просто прочитайте текстовый файл в строку
  2. Разделите строку на строки
  3. Разбить строки на массивы
  4. Разобрать строки в двойники
  5. Сравнить двойники и получить значения больше 50 в отдельном списке

Вы можете написать свой код какэто:

 For Each line As String In File.ReadAllLines("Your file here")
     Dim Spl() AS String = Split(line, ",")
     'Convert string value to integer
     Dim myNum As Double = Double.Parse(Spl(1))'The number is the second item in the array
     If myNum < 50.0 Then
          'Add to your first Listbox here using
          'Listbox.Add(myNum)
     Else
          'Add to your second Listbox here using
          'Listbox.Add(myNum)
     End If
 Next 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...