【问题标题】:Advanced Data Delimiter高级数据分隔符
【发布时间】:2017-03-07 10:48:08
【问题描述】:

我有一个包含超过 100,000 行数据的日志文件,而我真正关心的只有大约 5000 行。其余的大部分都是垃圾,就像下面的一样。它以一列中约 100K 行的形式全部导入 Excel,我无法对任何内容进行定界。我唯一能做的就是搜索所有“M-SEL”并将其更改为“;M-SEL”(与 SAC 行相同),然后这开始给我一些可以界定和整理的东西。有没有比我上面列出的更优雅的解决方案(VBA 或过滤技术​​?)?

00:00:00                      M-SEL  802151  - - -   is supergroup
00:00:01                 SAC REJECT  - - -   800508  508 is not a valid     group id

【问题讨论】:

  • 文本文件的结构如何?每条记录的行数是否固定且已知?还是 Time 模式是记录的分隔符?
  • 每个时间戳一行。所以在 Excel 中它看起来像 ~100,000 行和 1 列
  • 好消息似乎是不同列之间有“两个空格”。如果这是真的,解决方案可能很容易。你能验证一下吗?
  • 也可以是TAB
  • 它不是一个标签。如果是多个空格,您将如何分隔?如果我尝试划定空间,它会将所有内容都切碎并变得无法使用。我将它加载到 Notepad++ 中,它在时间和下一段文本之间没有显示制表符和 23 个空格。现在,如果我可以划定 23 个空格,我们就都准备好了!

标签: excel


【解决方案1】:

您可以使用此宏根据多个空格拆分列:

Sub importLog()
    Dim record As String, i As Long, sh As Worksheet, len1 As Long, len2 As Long, ar
    Set sh = Worksheets.Add
    Open "C:\SO\mylog.txt" For Input As #1 ' <-- Enter your file's name here
    Do Until EOF(1)
        Line Input #1, record
        Do
            len1 = Len(record)
            record = Replace(record, "   ", "  ")
            len2 = Len(record)
        Loop Until len2 = len1
        If len1 > 1 Then
            i = i + 1
            ar = Split(record, "  ")
            sh.Cells(i, 1).Resize(1, UBound(ar) + 1).value = ar
        End If
    Loop
    Close #1
End Sub

【讨论】:

  • 效果很好。感谢您的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-12
  • 2013-11-27
  • 2010-09-22
  • 2018-10-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多