2014-12-02 45 views
0

我正在開發一個VBA應用程序,我想要打開一個CSV文件,獲取某行的內容並將其存儲在一個字符串中。我有它的工作,但它似乎是一個蠻力的方法,我覺得應該有一個更優雅的方式來做比加載每一行,直到我想要我的字符串。從VBA的文本文件中檢索行

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?

+0

不用擔心字符串長度。我認爲它可能是16,384,但不確定。不幸的是,一個CSV文件是連續的,因此你需要閱讀,直到你找到你想要的行。如果它是一個非常大的文件,並且您大致知道文件中的哪個位置,則可以嘗試並獲得創意,並將其視爲一個隨機文件,但這有它自己的一套問題。 – 2014-12-02 03:20:13

回答

1

CSV文件是否有標題行?您可以使用CreateObject("ADODB.Connection")執行一個類似where EventNumber = something的SQL查詢。

查看結果:querying csv with vbs

+0

是的,CSV有一個標題行。這是一個簡單的應用程序 - 只有兩列,「標籤」和「消息」。我的系統監控標籤列中的標籤,並在標籤被激活時記錄關聯的消息。所以我想要做的就是說:「我正在查看第7行的標籤,因此請將第7行的消息給我。」我對VBA非常陌生,所以在發佈的鏈接中努力學習一些代碼 - 我會查找ADODB.Connection,看看我能否理解它。 – ASForrest 2014-12-02 22:29:32