2013-06-25 77 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! –