【问题标题】:Retrieve line from text file with VBA使用 VBA 从文本文件中检索行
【发布时间】:2014-12-02 11:06:45
【问题描述】:

我正在开发一个 VBA 应用程序,我想在其中打开一个 CSV 文件,获取某一行的内容,并将其存储在一个字符串中。我已经让它工作了,但这似乎是一种蛮力方法,我觉得应该有一种更优雅的方式来做这件事,而不是加载每一行直到我想要的那一行。

Dim RowCount As Long
Dim CurrentLine As Long
Dim objFSO, objFile
Const ForReading = 1
RowCount = 0

Set objFSO = CreateObject("Scripting.FileSystemObject")
        Set objFile = objFSO.OpenTextFile(FileName, ForReading) 'Open specified file

    CurrentLine = 0                         'Start with line "0"
    Message = objFile.ReadLine              'Read contents of first line
    Do While CurrentLine < EventNumber      'If the current line being examined is not the specified line
        CurrentLine = CurrentLine + 1       'Increment the current line counter
        Message = objFile.ReadLine          'And copy the specified line to the Message string
    Loop                                    'And repeat
    objFile.Close                           'Close the file when done

谁能提出更好的方法?

另外 - 如果我要加载的条目太长,我会遇到麻烦吗?需要多长时间?在 PLC 编程世界中,标准字符串是 82 个字符,这是否也适用于 VBA?

【问题讨论】:

  • 不用担心字符串长度。我认为可能是 16,384,但不确定。不幸的是,CSV 文件是连续的,因此您需要阅读直到找到所需的行。如果它是一个非常大的文件,并且您大致知道该文件的位置,您可以尝试发挥创意并将其视为随机文件,但这有其自身的一系列问题。

标签: vba csv


【解决方案1】:

CSV 文件是否有标题行?您可以使用CreateObject("ADODB.Connection") 执行带有where EventNumber = something 之类的sql 查询。

看看这个:querying csv with vbs

【讨论】:

  • 是的,CSV 有一个标题行。这是一个非常简单的应用程序——只有两列,“标签”和“消息”。我的系统监控标签列中的标签,并在标签被激活时记录相关消息。所以我想做的就是说“我正在查看第 7 行的标签,所以请给我第 7 行的信息。”我对 VBA 很陌生,所以很难按照您发布的链接中的代码进行操作 - 我将查找 ADODB.Connection,看看我是否能理解它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-20
  • 1970-01-01
  • 1970-01-01
  • 2015-07-20
  • 1970-01-01
  • 1970-01-01
  • 2019-10-10
相关资源
最近更新 更多