希望得到一个项目的帮助,我试图改进。我有一个函数我用来检索csv文件的最新日期(来自大约13000个文件的文件夹),使用工作簿中的两个单元格来查找文件路径和文件名。它工作得很好,会很快找到我正在寻找的文件。
为了改进这个工具,我需要查看csv并验证一些数字与我的工作簿中的另一个单元格匹配。我不知道如何告诉程序在哪里查看以及如何检查匹配。这些数字每次都在同一个位置,并且格式与我工作簿中的单元格完全相同。 csv也不使用逗号(如果重要的话)。例如,数字将位于第6列和第2行。我想在返回最近的日期之前检查我的A5单元格的值。如果不匹配,我想查看匹配的下一个最近日期,依此类推。当前功能I使用:
Function ReportTime(ByVal sESN As String, ByVal sFolder As String)
Dim FileName As String
Dim MostRecentFile As String
Dim MostRecentDate As Date
Dim oFSO As FileSystemObject
If Right(sFolder, 1) <> "\" Then sFolder = sFolder & "\"
Set oFSO = CreateObject("Scripting.FileSystemObject")
If oFSO.FolderExists(sFolder) Then
FileName = Dir(sFolder & sESN & "*hdr.txt", 0)
If FileName <> "" Then
MostRecentFile = FileName
MostRecentDate = FileDateTime(sFolder & FileName)
Do While FileName <> ""
If FileDateTime(sFolder & FileName) > MostRecentDate Then
MostRecentFile = FileName
MostRecentDate = FileDateTime(sFolder & FileName)
End If
FileName = Dir
DoEvents
Loop
End If
Else
MostRecentFile = "Err: folder not found."
End If
Set oFSO = Nothing
ReportTime = MostRecentDate
End Function
答案 0 :(得分:1)
与您已有的相比,它同样容易实现。这是一个示例代码。它的作用是逐行查看文件。
Sub ReadTextFile()
Dim fpath As String
Dim fline As String
Dim fnumb As Long
Dim i As Long
Dim Wanted As String
fpath = "C:\Test\Testfile.txt"
fnumb = FreeFile
Open fpath For Input As #fnumb
i = 1
Do While Not EOF(fnumb)
Line Input #fnumb, fline
If i = 2 Then
Wanted = Split(fline, vbTab)(5) '<~~ here is the output
Exit Do
End If
i = i + 1
Loop
Close #fnumb
End Sub
如果您想要关注文件的第2行,只需在i = 2
在第2行捕获文本后,如果您的文件是制表符分隔符,则可以使用split(fline, vbTab)(5)
提取第6列中的内容;否则,如果您的文件是固定宽度文件,则只需使用MID
函数。
获得所需内容后,只需exit do
即可结束循环并快速结束该过程,而无需浏览整个文件。
HTH