Access中的文本文件处理

时间:2016-05-02 21:05:16

标签: ms-access access-vba

Access 2016:我的目标是使用Access VBA简单地读入文本文件。我使用了FileOpen函数{FileOpen(1,“TESTFILE”,OpenMode.Input)},但是只要我输入“FileOpen(”并且我立即得到立即编译错误,它就不会提示参数完成。尝试使用FileSystemObject OpenTextFile方法,但它也没有编译(我确实将Runtime Scripting库添加到我的引用列表中。)想法?

2 个答案:

答案 0 :(得分:3)

在VBA中有两种主要的方法来读取文本文件 - Scripting.FileSystemObject(a.k.a。文本流)和Open

虽然代码看起来有点丑陋,但我更喜欢使用Open ... As #,原因如下:

  • 文件读/写性能通常会好一点
  • 二进制/随机操作要容易得多
  • 对于大型读取,文本流有点不稳定

以下两种不同的方法可以做同样的事情:

Public Function GetFileContentsByLine(fileName As String) As String
  Dim ff As Long
  Dim thisLine As String
  ff = FreeFile

  Open fileName For Input As #ff
    Do Until EOF(ff)
      Input #ff, thisLine
      GetFileContentsByLine = GetFileContentsByLine & thisLine & vbCrLf
    Loop
  Close #ff
End Function

此版本假定您希望一次浏览一行(这是读取文本文件的常规方法)。如果你想一次性阅读全部内容,这不是最快的方式,但它可以让你灵活地在拉入时对各条线作出反应。

对于非常大的文本文件,您可能会遇到Out of memory错误。这是因为字符串如何添加到内存中的其他字符串。但是,对于典型情况,您不应该遇到任何问题。

Public Function GetFileContents(fileName As String) As String
  Dim ff As Long
  Dim thisLine() As Byte
  ff = FreeFile

  Open fileName For Binary As #ff
    ReDim thisLine(LOF(ff))
    Get #ff, , thisLine
  Close #ff
  GetFileContents = StrConv(thisLine, vbUnicode)
End Function

此版本计算出文件的大小,在一个大块中抓取整个内容,然后将内容存储为字符串。它比第一种方式更快,但它并不是人们在谈论“阅读文本文件”时通常所说的。

答案 1 :(得分:0)

这是一个如何读取文件并返回内容的示例函数。您将需要对Runtime Scripting库的引用

Function SampleReadFile() As String
Dim fso As FileSystemObject
Dim txtStream As TextStream
Dim strContents As String

'create file system object
    Set fso = CreateObject("Scripting.FileSystemObject")

    'get the text stream of the file
    Set txtStream = fso.OpenTextFile("Path to my file")
    'read the contents into a string
    strContents = txtStream.ReadAll

    'close the text stream
    txtStream.Close
    'free the memory
    Set txtStream = Nothing
    Set fso = Nothing
    'return the contents of the file
    SampleReadFile = strContents
End Function