读取csv文件的最后五行

时间:2014-04-21 19:14:47

标签: vb.net csv

我正在使用以下代码从csv读取前1000行 - 只有前6列 - 并将它们保存在数组P2(,)中:

fName = "c:\temp\filexx.csv"
        If System.IO.File.Exists(fName) = True Then
            Dim tmpstream As StreamReader = File.OpenText(fName)
            TextLine = tmpstream.ReadToEnd().Split(Environment.NewLine)
            SplitLine = Split(TextLine(0), ",")
            For X = 0 To 999  'reading only the first 1000 lines
                strline = TextLine(X).Split(",")
                For Y = 0 To 5 '6 columns
                    P2(X, Y) = strline(Y)
                Next
            Next
            tmpstream.Close() 
        Else
            MsgBox("file doesn't exist")
        End If

但我对最后5行感兴趣。所以,我应该改变

TextLine = tmpstream.ReadToEnd().Split(Environment.NewLine)

类似于

TextLine = tmpstream.ReadLine(fName.Length - 6)

但我不知道该怎么做。 非常感谢您的提示,链接,耐心和清晰度

2 个答案:

答案 0 :(得分:1)

读取CSV的最后6行的唯一方法是读取所有行,并跟踪您读取的最后6行。

由于CSV格式允许每一行具有可变宽度,因此无法计算正确的文件偏移量以仅加载最后6行。

您当前正在读取整个文件,创建一个包含所有行的数组TextLine

TextLine = tmpstream.ReadToEnd().Split(Environment.NewLine)

只需访问TextLine的最后6个元素即可获得答案。

答案 1 :(得分:0)

我使用过fllwing:

 If System.IO.File.Exists(fName) = True Then
            Dim tmpstream As StreamReader = File.OpenText(fName)
            Dim lineCount = File.ReadAllLines(fName).Length 
            TextLine = tmpstream.ReadToEnd().Split(Environment.NewLine)
            SplitLine = Split(TextLine(0), ",")
            For X = 0 To 4
                strline = TextLine(lineCount - X - 1).Split(",") 'trying to read the last 5 lines
                For Y = 0 To 5 '6 columns
                    P1(X, Y) = strline(Y)
                Next
            Next
            tmpstream.Close() 'close reader
        Else
            MsgBox("File doesn't exist")
        End If

但是没有办法阅读最后一行。如果我使用strline=TextLine(lineCount - X)它会在P1(X,Y)= strline(Y)处断开,X = 0且Y = 1我想是因为尝试读取strlline = TextLine(lineCount)。 谢谢您的帮助。 我不确定是否违反了论坛的规则,但我还没有找到另一种编写代码的方法。