Как ввести данные в массив из текстового файла, которые разделены vbTab? - PullRequest
0 голосов
/ 19 марта 2012

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

Eddy vbtab 20
Andy vbtab 30 
James vbtab 20

и т. Д.

Iхочу настроить имена как массив имен, а числа как массив чисел.

Теперь я сделал следующее:

strFilename = "CustomerPrices.txt"
If File.Exists(strFilename) Then
  Dim srReader As New StreamReader(strFilename)
  intRecords = srReader.ReadLine() 
  intRows = intRecords     

  For i = 0 To intRows - 1
    intLastBlank = strInput.IndexOf(vbTab)
    strName(intPrices) = strInput.Substring(0, intLastBlank)

    dblPrices(intPrices) = Double.Parse(strInput.Substring(intLastBlank + 1))

Но когда я отлаживаюсь, возникает проблема "Ссылка на объект неустановить экземпляр объекта "

Может кто-нибудь дать мне совет?

Спасибо

1 Ответ

3 голосов
/ 19 марта 2012

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

Public Class CustomerPrice
   Public Property Name As String
   Public Property Price As Decimal
End Class

Public Function ReadCustomerPrices(ByVal fileName As String) As List(Of CustomerPrice)
    Dim result As New List(Of CustomerPrice)()
    Using srReader As New StreamReader(fileName)
        Dim line As String
        While (line = srReader.ReadLine()) <> Nothing
            Dim data() As String = line.Split(vbTab)
            result.Add(new CustomerPrice() From {Name = data(0), Price = Decimal.Parse(data(1))})
        End While
    End Using
    Return result
End Function

Некоторые другие вещи, которые стоит отметить в этом коде:

  • Блок Using гарантирует, что файл будет закрыт, даже если будет сгенерировано исключение
  • Почти никогда не уместно проверять File.Exists ().Это расточительный код, потому что вы все еще должны иметь возможность обрабатывать исключения файлов.
  • При работе с деньгами вы почти всегда хотите использовать тип Decimal вместо Double
  • Этот кодтребует Visual Studio 2010 / .Net 4 и была введена непосредственно в окно ответа и, вероятно, содержит ошибку или даже базовую синтаксическую ошибку.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...