【问题标题】:Importing last line of a .csv file导入 .csv 文件的最后一行
【发布时间】:2013-06-25 13:41:21
【问题描述】:

我有一个 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

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

txt文件示例

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

【问题讨论】:

  • .csv 文件是小到可以一次性读入内存,还是大文件?
  • 这是一个大约 30 行的小文件
  • 虽然在 c# 中,this 回答了您正在寻找的内容。
  • 请注意,VB 有Microsoft.VisualBasic.FileIO.TextFieldParser,但这可能有点矫枉过正。
  • 感谢大家的帮助!我只需要添加这一行并取出 while 循环 Dim lastLine = File.ReadLines("C:\temp\Apr12log.txt").Last()

标签: vb.net csv


【解决方案1】:

或者,您可以使用 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

【讨论】:

【解决方案2】:

您只阅读一行内容。而是使用 ReadToEnd() 然后用新行分割,如下所示:

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

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

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

【讨论】:

    【解决方案3】:

    您可以通过对现有代码进行几次编辑来获得所需的内容:

    换档

       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 是文件中的最后一行。

    【讨论】:

    • 他还需要将所有字段的读数移到 while 循环之后,这就是他从第一行获取数据的原因。
    • @smoore 这就是为什么我的第一行说将While 循环移到第一个Dim 之后。
    • 确实如此!对不起,我没有遵循正确的。 +1 先生!
    • 感谢大家的帮助!我只需要添加这一行并取出 while 循环 Dim lastLine = File.ReadLines("C:\temp\Apr12log.txt").Last()
    【解决方案4】:

    试试这个:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-12
      • 1970-01-01
      相关资源
      最近更新 更多