3

我有一个包含制表符分隔的整数和双精度的文本文件,例如:

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 中将每一行作为双精度数组访问的便捷方法——这样第一个数组是 [ 5.0 0.3 2.9 61.0 110.0 ],第二个数组是 [ 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 回答