3

在 file.txt 我有如下引号

D:\file.txt:

    """\\server1\pc1\targetG0\source-pc\pkgs.gz"""

我的目标是将 D:\file.txt 中的行读入 pFile 参数

因此,我编写了以下简单的 VBA 代码:

  Dim pFile As String
  Open "D:\file.txt" For Input As #1
  Input #1, pFile
  Close #1

  MsgBox pFile

我运行我的 VBA 代码,但由于不清楚的原因 pFile 没有得到文件中行的内容,txt 和 MsgBox 打印空框?

请告知为什么 pFile 得到 null ?以及我需要在代码中修复的内容,以便将 file.txt 中的行放入 pfile 参数中

  • 备注如果我从该行中删除引号,则 pfile 将从文件中获取该行
4

2 回答 2

9

在 的文档Input #,它指出:

您不应编写包含嵌入引号的字符串,例如“1,2”“X”以用于 Input # 语句: Input # 将此字符串解析为两个完整且单独的字符串。

所以这里发生的是你的字符串被解析成三个单独的字符串,因为你只使用一个变量作为参数,Input #所以它只包含第一个(空)字符串。将您的代码稍微更改为以下内容:

Dim pFile As String
Dim pFile2 As String
Dim pFile3 As String

Open "D:\file.txt" For Input As #1
Input #1, pFile, pFile2, pFile3
Close #1

结果如下:

pfile: (empty)
pfile2: \\server1\pc1\targetG0\source-pc\pkgs.gz
pfile3: (empty)

如果你不能使用它,那么替代方法可能是使用Line Input #语句(链接),它的工作原理与它类似,Input #只是它不像分隔行(即由于逗号/分隔符)Input #。下面的代码片段:

Dim pFile As String

Open "D:\file.txt" For Input As #1
Line Input #1, pFile
Close #1

结果是:

pfile: """\\server1\pc1\targetG0\source-pc\pkgs.gz"""

然后您可以根据自己的要求进行修改。

于 2012-08-01T11:47:04.897 回答
4

我总是将 Scripting.FileSystemObject 用于涉及文件系统的所有操作,包括 I/O:

Dim fs As Object
Set fs = CreateObject("Scripting.FileSystemObject")
Dim f As Object
Set f = fs.OpenTextFile("D:\file.txt")
Dim s As String
s = f.ReadLine()

OpenTextFile很多可选参数,请参见此处,您可以在其中指定文件是否打开以进行读/写,是否应在访问时创建,是否为 Unicode (UTF16) 等。

如果我在您提供的字符串上运行您的代码,我会遇到与您相同的问题。不过,带有 OpenTextFile 的代码运行正常。

于 2012-08-01T11:21:24.060 回答