2013-06-25 79 views
0

我有一个csv文件,我需要将最后一行仅放入单独的文本框中。导入.csv文件的最后一行

Imports System.IO 

Public Class Form1 

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    End Sub 

    Private Sub btnConditions_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConditions.Click 
     Using reader As New StreamReader("C:\temp\Apr12log.txt") 
      Dim line As String = reader.ReadLine() 


      Dim fields() As String = line.Split(",".ToCharArray()) 
      Dim fileDate = CDate(fields(0)) 
      Dim fileTime = fields(1) 
      Dim fileTemp = fields(2) 
      Dim fileHum = fields(3) 
      Dim fileWindSpeed = fields(4) 
      Dim fileWindGust = fields(5) 
      Dim fileWindBearing = fields(6) 

      While line IsNot Nothing 

       line = reader.ReadLine() 
      End While 
      txtDate.Text = CStr(fileDate) 
     End Using 

    End Sub 

End Class 

它只输入第一行我不知道如何获得最后一行。 txtfile

01/04/12,00:00,5.4,80,3.0,4.5,9.6,261,0.0,0.0,1025.0,1.0,16.8,43,4.0,3.8,5.4,0.0,0,0.0 
+0

.csv文件是否足够小,可以一次读入内存,还是一个巨大的文件? –

+0

这是一个30行左右的小文件 – yolad

+0

虽然在c#中,[这](http://stackoverflow.com/questions/11625595/read-last-line-of-text-file)回答你正在寻找什么。 – shahkalpesh

回答

3

或者,您可以使用System.IO.File ReadLines()函数,该函数为您提供了一个枚举,您可以调用Last()。

Private Sub btnConditions_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConditions.Click 

     Dim line As String = System.IO.File.ReadLines("C:\temp\Apr12log.txt").Last() 

     Dim fields() As String = line.Split(",".ToCharArray()) 
     Dim fileDate = CDate(fields(0)) 
     Dim fileTime = fields(1) 
     Dim fileTemp = fields(2) 
     Dim fileHum = fields(3) 
     Dim fileWindSpeed = fields(4) 
     Dim fileWindGust = fields(5) 
     Dim fileWindBearing = fields(6) 

     txtDate.Text = CStr(fileDate) 

End Sub 
+0

作品简单地感谢! – yolad

+0

考虑[标记答案是正确的](http://meta.stackexchange.com/a/5235/208536),并提出答案,如果它帮助你 – SysDragon

0

例子试试这个:

Dim lines() As String = File.ReadAllLines("C:\temp\Apr12log.txt") 

lastLine = lines(lines.Length - 1) 
1

你只是在一个线读取。而是使用ReadToEnd的(),然后由新线分开,就像这样:

Dim lines() As String = reader.ReadToEnd().Split(Environment.NewLine) 

然后你可以移动到最后一行:

Dim line As String = lines(lines.Length - 1) 
1

你可以得到你想要的东西与一对夫妇编辑的你的现有代码:

While line IsNot Nothing 

     line = reader.ReadLine() 
    End While 

为了刚过

Dim line As String = reader.ReadLine() 

添加另一个

Dim line2 As String = Nothing 

而且插入

 line2 = line 

进入While循环,即

While line IsNot Nothing 
     line2 = line 
     line = reader.ReadLine() 
    End While 

现在line2是文件的最后一行。

+1

他还需要将所有字段的读数移动到之后while循环,这就是他从第一行获取数据的原因。 –

+0

@smoore这就是为什么我的第一句话是说把'While'循环移到第一个'Dim'后面。 –

+0

确实如此!对不起,我没有遵循这个权利。先生+1! –