Палец вверх 0
Перевод
Перевод

Чтение из текстового файла в массив

Я пытаюсь прочитать текстовый файл построчно и добавить его в массив, текущий код и вывод ниже. Как бы я прочитал это правильно, т.е. получить фактический текст для чтения в массив, а не текущий вывод. (Консольное приложение версии VB.NET)

Код:

Sub Main()
    Dim file As String = "C:\path\to\file\textfile.txt"
    Dim quoteArray As New ArrayList
    FileOpen(1, file, OpenMode.Input)
    Do While Not EOF(1)
        quoteArray.Add(LineInput(1))
    Loop
    FileClose(1)
    Console.WriteLine(quoteArray)
    Console.ReadLine()
End Sub

Выход:

System.Collections.ArrayList
vb.net
задан Jack Finney 27 дек. 2017 г., 19:09:35
источник

2 ответа

Решение 4
Перевод
Перевод

Ваш код работает, но вы не можете распечатать весь массив сразу. Вы должны как-то итерировать массив и печатать каждый элемент отдельно или объединять их в одну строку.

Печать каждого элемента отдельно:

For Each Item As String In quoteArray
    Console.WriteLine(Item)
Next

Объединяя их в одну строку, используя String.Join() :

Console.WriteLine(String.Join(Environment.NewLine, quoteArray.ToArray(GetType(String))))

Однако я не понимаю, почему вы пишете в VB.NET, но все еще используете устаревшие функции и классы эпохи VB6:

  • ArrayList

  • FileOpen()

  • LineInput()

  • FileClose()

В наши дни есть намного лучшие альтернативы:

Или вы можете заменить все вышеперечисленное обычным массивом и одним вызовом File.ReadAllLines() .

  1. Решение StreamReader :

    Dim quoteList As New List(Of String)
    
    Using Reader As New StreamReader("C:\path\to\file\textfile.txt")
        While Reader.EndOfStream = False
            quoteList.Add(Reader.ReadLine())
        End While
    End Using
    
  2. File.ReadAllLines() :

    Dim quoteArray As String() = File.ReadAllLines("C:\path\to\file\textfile.txt")
    

Печать списка / массива с использованием цикла:

For Each Item As String In quoteArray
    Console.WriteLine(Item)
Next

Печать списка / массива с использованием String.Join() :

Console.WriteLine(String.Join(Environment.NewLine, quoteArray))

(если вы используете решение quoteList просто замените quoteArray на quoteList в этих двух примерах)

ответ дан Visual Vincent 27 дек. 2017 г., 19:21:58
источник
Палец вверх 2
Перевод
Перевод

Используйте ReadLines :

Методы ReadLines и ReadAllLines отличаются следующим образом: когда вы используете ReadLines, вы можете начать перечисление коллекции строк до того, как будет возвращена вся коллекция; когда вы используете ReadAllLines, вы должны подождать, пока весь массив строк будет возвращен, прежде чем вы сможете получить доступ к массиву. Поэтому, когда вы работаете с очень большими файлами, ReadLines могут быть более эффективными.

ответ дан JohnyL 27 дек. 2017 г., 21:14:37
источник