3

タブ区切りの整数と double を含むテキスト ファイルがあります。

5[TAB]0.3[TAB]2.9[TAB]61[TAB]110
8[TAB]1.1[TAB]5.2[TAB]13[TAB]45
1[TAB]0.8[TAB]1.4[TAB]28[TAB]33
...

私が必要としているのは、VB.NET で double 配列として各行にアクセスする便利な方法です。つまり、最初の配列は [ 5.0 0.3 2.9 61.0 110.0 ] になり、2 番目の配列は [ 8.0 1.1 5.2 13.0 45.0 ] になります。の上...

StreamReader を使用してこれをどのように達成できますか?

4

1 に答える 1

3

配列のリストの代わりにリストのリストを使用しても問題ない場合は、次のようにします。

Private Function LoadFile(ByVal filePath As String) As List(Of List(Of Double))
    Dim records As New List(Of List(Of Double))()
    For Each line As String In File.ReadAllLines(filePath)
        Dim values As New List(Of Double)()
        For Each field As String In line.Split(New String() {ControlChars.Tab}, StringSplitOptions.None)
            values.Add(Double.Parse(field))
        Next
        records.Add(values)
    Next
    Return records
End Function

または、配列のリストでなければならない場合は、次のようにすることができます。

Private Function LoadFileToArrays(ByVal filePath As String) As List(Of Double())
    Dim records As New List(Of Double())()
    For Each line As String In File.ReadAllLines(filePath)
        Dim values As New List(Of Double)()
        For Each field As String In line.Split(New String() {ControlChars.Tab}, StringSplitOptions.None)
            values.Add(Double.Parse(field))
        Next
        records.Add(values.ToArray())
    Next
    Return records
End Function

配列の配列が必要な場合はrecords.ToArray()、最後の例で、代わりに単に を返すことができます。あなたの質問では、それらをどのように処理したいかが明確ではなかったため、無効または空のフィールド値を処理するためのコードを追加しませんでした。したがって、それを適切に処理するコードを追加する必要があります。そうしないと、このコードはそのような場合に例外をスローします。

于 2012-12-27T12:21:20.880 に答える