【问题标题】:Iterate through CSV File line by line for matching rows逐行遍历 CSV 文件以匹配行
【发布时间】:2020-06-10 13:07:55
【问题描述】:

我想在读取该行后从 CSV 中删除记录。请指导我如何实现这一目标。

我找到了这段代码:

Sub ImportCSVFile(ByVal filePath As String, ByVal ImportToRow As Integer, ByVal StartColumn As Integer)

Dim line As String
Dim arrayOfElements
Dim element As Variant


Open filePath For Input As #1 ' Open file for input
    Do While Not EOF(1) ' Loop until end of file
        Line Input #1, line
        Debug.Print line
        arrayOfElements = Split(line, ";") 'Split the line into the array.
    Loop
Close #1 ' Close file.
End Sub

它正在读取 CSV 文件并按要求工作。有人可以告诉我如何在阅读后删除CSV文件中的行吗?

【问题讨论】:

  • 欢迎来到 Stack Overflow。在这里提供帮助的人不仅仅是为您编写所有代码,他们在这里帮助您解决您在编写自己的代码时遇到的具体问题。如果您正在寻找一个起点,我将从学习如何阅读文本文件开始。 stackoverflow.com/questions/20390397/…
  • 感谢您的评论,我已经用一段代码更新了我的问题,该代码在读取 CSV 文件时效果很好。你能指导我如何删除我已经读过的行吗?
  • 从 text/csv 文件中删除?接下来,您将需要学习如何编写文本文件。你读取一个文件,按照你想要的方式处理它,然后将结果写入一个新文件。您不会“从正在阅读的文件中删除内容”
  • 实际上 CSV 文件是日志文件,我正在读取该文件并将该数据发送到数据库,现在我想从日志文件中删除记录,因为我已将其发送到数据库。这项任务的最佳方法应该是什么?
  • 正如我所说,这里的人不会为您编写所有代码。你需要把它分解成小块,学习如何做每一块,然后把这些块放在一起。注意现在你的问题已经完全改变了,因为现在它也涉及到一个数据库。这就是为什么没有人会尝试为您编写所有内容的原因。

标签: excel vba


【解决方案1】:

如果我要这样做,我会使用FileSystemObject 来读取一行而不是直接打开文件。我不确定你想做什么来编辑日志文件本身,但我想循环遍历每一行,然后遍历每个标记,我将使用的代码是:

Sub ImportCSVFile(ByVal filePath As String, Optional ByVal ImportToRow As Long = 0, Optional ByVal StartColumn As Long = 1)

'Declare variables.
Dim FSO As Object, sourceFile As Object
Dim line As String, delimiter As String, ForReading As Integer: ForReading = 1
Dim i As Long: i = 1
Dim arrayOfElements As Variant, element As Variant

'Create file system object and open filePath .csv parameter.
Set FSO = CreateObject("Scripting.FileSystemObject")
Set sourceFile = FSO.OpenTextFile(filePath)

delimiter = ";"

'Main loop, reads each line of the .csv file.
Do While Not sourceFile.AtEndOfStream

    'Checks if the line being read is at or after the StartColumn parameter.
    If i >= StartColumn Then

        'Splits line string into an array based on the delimiter.
        line = sourceFile.ReadLine
        arrayOfElements = Split(line, delimiter)

        'Loops through array elements.
        For Each element In arrayOfElements
            'Your code here.
        Next element

    End If

    'If a value for ImportToRow is provided checks if that line has been reached.
    If Not ImportToRow = 0 Then

        If i >= ImportToRow Then
            Exit Do
        End If

    End If

i = i + 1: Loop

'Cleans up objects.
Set sourceFile = Nothing: Set FSO = Nothing

结束子

【讨论】:

  • 刚刚注意到 line=sourceFile.ReadLine 部分应该在 if 语句之外。
猜你喜欢
  • 2019-09-24
  • 1970-01-01
  • 1970-01-01
  • 2019-08-14
  • 2014-06-25
  • 2016-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多