当前位置: 代码迷 >> VB Dotnet >> vb.net 读取多行数目字 txt文档
  详细解决方案

vb.net 读取多行数目字 txt文档

热度:118   发布时间:2016-04-25 02:17:24.0
vb.net 读取多行数字 txt文档
vs 2008  window7
实现的功能:是将txt 文档里面的8行数据读入并放到一个2维的数组里面,2维数组是8行1023列
但是在运行的时候总是显示错误!
values(j, i) = Double.Parse(valuesString(i * 1023 + j))输入字符串的格式不正确。
Public Function GetValues1(ByVal file As String, ByVal values(,) As Double) As Double

        Dim line As String = String.Empty '定义空字符

        Using reader As New System.IO.StreamReader(file) '读取文件
            line = reader.ReadToEnd '
        End Using

        Dim valuesString As String() = System.Text.RegularExpressions.Regex.Split(line, "\s+") 'split函数将字符串分割,用"\s+"隔开。
               For i As Integer = 0 To 7
            For j As Integer = 0 To 1023
                values(j, i) = Double.Parse(valuesString(i * 1023 + j)) '将字符转换成double类型
            Next
        Next

    End Function
------解决方案--------------------
学会调适吧,你的代码是有逻辑错误的
2维数组是8行1023列
那你的循环体应该是
             For i As Integer = 0 To 7
             For j As Integer = 0 To 1022
                 values(j, i) = Double.Parse(valuesString(i * 1023 + j)) '将字符转换成double类型
            Next
         Next
但这样的错误应该是提示下标越界,而且我也搞不清楚为什么一行是1023,而不是1024?

你的提示就是数据类型不对,说明文档里有特殊符号,看看出错的时候i,j的值,找到valuesstring里这个值是什么吧
------解决方案--------------------
你的文档是逗号分隔还是空格分隔?
Dim valuesString As String() = System.Text.RegularExpressions.Regex.Split(line, "\s+") 'split函数将字符串分割,用"\s+"隔开。

你这句话可是说用空格分隔,"\s+" 表示一个或多个空格,用是用逗号分隔就 改成 “,”

------解决方案--------------------
 Dim Path1 As String = "D:\result.txt"
        Dim AllLines As String() = File.ReadAllLines(Path1)

直接把文本全部导入到数组里。
------解决方案--------------------

Public Class Test

    Public Shared Sub Main()
        Dim path As String = "c:\MyTest.txt" ' 文件路径
        Dim sr As StreamReader = Nothing
        Dim result(8, 1024) As Double
        
        Try 
            sr = New StreamReader(path)
            Dim line As String = String.Empty '定IN空字符
            
            Dim i As Integer = 0
            Do While sr.Peek() >= 0
                line = sr.ReadLine()
                Dim lineCell() As String = line.split(",")
                For j As Integer = 0 To lineCell.length
                    Dim number As Double
                    If Double.TryParse(lineCell(j).Trim(), number) Then
                        result(i, j) = number
                    Else
                        Console.WriteLine("line:[" + (i + 1) + "], column[" + (j + 1) + "], Value[" + lineCell(j) + "] cannot conver to Double.")
  相关解决方案