2012-03-19 4 views
0

は次のとおりです。などvbTabで区切られたテキストファイルからデータを配列に入力する方法は?私は、テキストファイルに私が持っているもの、基本的には、配列に.txtファイルからのデータのセットを回してトラブルを抱えています

Eddy vbtab 20 
Andy vbtab 30 
James vbtab 20 

..

は、私が設定したいですNames配列としての名前、およびNumber配列としての数字。

今、私が行っていることは

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)) 

あるしかし、私は、私が問題「オブジェクトのインスタンスに設定されていないオブジェクト参照」を取得デバッグ

は、誰も私にいくつかのアドバイスを与えることはできますか?

ありがとうございました

+0

次の解決策を教えてくれました。デバッグの問題についてのあなたの質問への答えは、 'strInput'を宣言したり、何かを割り当てたりせずに使用しているということです。 (あなたは一行のテキストを 'intRecords'に読み込みます。あなたは決して使用しません。そして' strInput'を使用します。また、宣言されていない 'strName'、' intPrices'、 'dblPrices'を参照してくださいあなたのコード内のどこでも) –

+0

@Kenwhiteこんにちは、それを指摘してくれてありがとう、しかし、私はすべての必要なオブジェクトを宣言した、私はちょうどポストに表示されませんでした。このコードをデバッグするときにNullReferenceExceptionが処理されなかった - 「オブジェクト参照がオブジェクトのインスタンスに設定されていません」 – Eddy

+0

あなたのコードは割り当てなしで使用されていることを示しています。他の場所に宣言してもそれを表示しなかったとしても、それらを使用する前に値を割り当てておく必要があります。そのため、NullReferenceExceptionが発生します。 (そして、コードに関連する問題があるときは、**完全な**コードを投稿する必要があります。そうしないと、正しい答えを得る機会はずっと少なくなります。) –

答えて

3

個別の配列はおそらくここでは悪い考えです。ほとんどの場合、レコードごとにデータをグループ化する方が良い場合は、フィールドごとにデータをグループ化します。その代わりに、特定のタイプのクラスでいっぱいになった単一のコレクションです。このような何かのために行く:

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 

このコードで注目すべきいくつかの他の事:

  • 使用ブロックは例外が
  • をスローされた場合でも、それはほとんどことはない、ファイルが閉じられている保証されますFile.Exists()をチェックするのに適しています。ファイルioの例外を処理できる必要があるので、無駄なコードです。
  • お金で作業する場合、ほとんどの場合、DoubleではなくDecimal型を使用したい
  • このコードでは、Visual Studio 2010/.Net 4が必要で、返信ウィンドウに直接入力されたため、基本構文エラーですらあります。
+0

、私はそれを試してみましょう! – Eddy

+0

私の最後の文についての事例:最初はwhileループを忘れてしまった –

関連する問題