我正在使用以下代码从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)
但我不知道该怎么做。 非常感谢您的提示,链接,耐心和清晰度
答案 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)。
谢谢您的帮助。
我不确定是否违反了论坛的规则,但我还没有找到另一种编写代码的方法。