【问题标题】:Read varying part from text file (VBA)从文本文件(VBA)中读取不同的部分
【发布时间】:2017-11-08 14:43:24
【问题描述】:

从以下两个示例文件中,我只想将所有以#COLUMNINFO 开头的行读入一个 excel 文件,并且每行都使用逗号作为分隔符分隔。

我很难只读取这些行,因为每个文件的行号都会改变。到目前为止,我的尝试是使用类似于以下代码的一段代码:

Do Until ts.ReadLine = "#COLUMN= " & [?]
Loop

并从该行开始读取文件,但我似乎无法将通配符与 .ReadFile 结合使用。

欢迎任何帮助。

Example 1

Example 2

我已经编辑了我的代码,这是更新后的结果。不知何故,“Do While 循环”失败了。
编辑:

Sub InfoExtractorTest()

    Dim fso As Scripting.FileSystemObject
    Dim ts As Scripting.TextStream
    Dim textline As String
    Dim CommaPosition As Integer

    Set fso = New Scripting.FileSystemObject

    Set ts = fso.OpenTextFile(Environ("Userprofile") & "\Desktop\VBA Test\GEFExtractor\Example GEF's\362B-S142.gef")

    Do While Not ts.AtEndOfStream

      'Reads indiviual lines from file
        Data = ts.ReadLine
        If InStr(1, UCase(Data), "#COLUMNINFO") > 0 Then

        textline = ts.ReadLine
        CommaPosition = InStr(textline, ",")

            Do Until CommaPosition = 0
                ActiveCell.Value = Left(textline, CommaPosition - 1)
                ActiveCell.Offset(0, 1).Select
                textline = Right(textline, Len(textline) - CommaPosition)
                CommaPosition = InStr(textline, ",")
            Loop

            ActiveCell.Value = textline
            ActiveCell.Offset(1, 0).End(xlToLeft).Select

        End If
    Loop

    ts.Close
    Set fso = Nothing

End Sub

【问题讨论】:

  • 你的想法是正确的。看看Instr 函数。或者,如果您想要通配符,请查看 Like 运算符。
  • 如果答案解决了您的问题,请考虑accepting it,点击复选标记并点击向上箭头投票。这向更广泛的社区表明您已经找到了解决方案。没有义务这样做。

标签: vba text-files wildcard


【解决方案1】:

赞这个link 表示你想使用“赞”。

Do Until ts.ReadLine Like "#COLUMN= *" & [?]
Loop

这将允许您使用星号作为通配符

【讨论】:

  • 我也试过了,但是没用。即使我有一个工作代码,并应用“Like”运算符并用星号替换一个字母,我也会在该行收到运行时错误“62”。
  • 我想通了。我应该也用星号替换第一个“#”,它明显地弄乱了代码。谢谢!
【解决方案2】:

如果我正确理解您的问题,请尝试以下操作:

Do While Not ts.AtEndofStream
   data = ts.ReadLine

   If InStr(1, UCase(data), "#COLUMNINFO") > 0 then
      'do something
   End If
Loop

ts.close

我假设您正在使用FileSystemObject 来读取文件。

【讨论】:

  • 我使用您和其他回复者的评论添加了一个“Do While 循环”,但它还不能正常工作。我已经在我编辑的帖子中添加了完整的代码,你能给我一个正确的方向来让它工作吗?
  • 使用修改后的代码,如果文件的第一行不包含COLUMNINFO,那么您将不会进入循环。这里是这样吗?无论如何,如果您像我上面显示的那样构建修改后的代码,它应该可以满足您的需求。
  • 我已经实施了您的建议(请参阅最近的编辑)。但是,它在结构上跳过了一行。所以,在满足条件的情况下:不提取第 1、3、5 行,而提取第 2、4、6 行。
  • 因为你多了一个ReadLine。删除textline = ts.ReadLine(并将每个textline 引用替换为data),你应该会很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多