ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 2081|回复: 11

[求助] 按条件提取文本文件内容写入excel。

[复制链接]

TA的精华主题

TA的得分主题

发表于 2021-2-27 22:34 | 显示全部楼层 |阅读模式
本帖最后由 mudao 于 2021-3-1 19:50 编辑

文件夹内有日期等信息为文件名的文本文件若干,
文件名20210220***,
内在数据行(数字数据固定为21位)如:
14:52:05 原始数据:35 39 39 45 20 31 38 32 31 32 31 52 31 31 30 30 31 30 31 36 14
需要将文件名中的日期、数据行的内容按以下格式录入excel内
如:“日期”  “时间”  “8-11位数(每位数据的第一位不要,将剩余数据组合在一起,如上例中的32 31 32 31转换为2121)”        "12位数(52)"        "13-15位数(每位数据的第一位不要,将剩余数据组合在一起,如上例中的31 31 30转换为110)"          "16-17位数(每位数据的第一位不要,将剩余数据组合在一起,如上例中的30 31转换为01"        "18-20位数(每位数据的第一位不要,将剩余数据组合在一起,如上例中的30 31 36转换为016。修订:原写为18-19位,因此造成kzg2013回答问题的语句有些问题,但好在代码很好理解,稍稍更改就好了)"
“20210220 14:52:05 2121 52 110 01 016”
搜索贴子,有高手以前解答问题的代码可以提取数据到excel,但还需要在excel内进行筛选、提取等工作,不是很方便且没多文件提取及日期写入的功能。求助各位大神给写个完善一下,工作急需,谢谢!

                                       


image.png

求助VBA读取TXT数据.zip

27.93 KB, 下载次数: 15

TA的精华主题

TA的得分主题

发表于 2021-2-27 23:11 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 约定的童话 于 2021-2-28 09:41 编辑

Sub 提取log()
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    t = Timer
    On Error Resume Next
    Dim i, n, arr, brr(1 To 1000, 1 To 8)
    F = Dir(ThisWorkbook.Path & "\" & "*.log*")
    Do While F <> ""
        arr = Split(ReadXML(ThisWorkbook.Path & "\" & F), Chr(10))
        For i = 1 To UBound(arr) Step 11
            n = n + 1
            brr(n, 1) = Split(F, "-P")(0)
            brr(n, 2) = Left(arr(i), 8)
            brr(n, 3) = Mid(arr(i), 40, 1) & Mid(arr(i), 43, 1) & Mid(arr(i), 46, 1) & Mid(arr(i), 49, 1)
            brr(n, 4) = Mid(arr(i), 51, 2)
            brr(n, 5) = Mid(arr(i), 55, 1) & Mid(arr(i), 58, 1) & Mid(arr(i), 61, 1)
            brr(n, 6) = Mid(arr(i), 64, 1) & Mid(arr(i), 67, 1)
            brr(n, 7) = Mid(arr(i), 70, 1) & Mid(arr(i), 73, 1) & Mid(arr(i), 76, 1)
        Next
        F = Dir
    Loop
    [A2].Resize(UBound(brr), 8) = brr
    MsgBox "转换完毕!耗时:" & Format(Timer - t, "0.00") & "秒!", , "报告!"
End Sub

log密码解析.gif

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-2-28 08:20 来自手机 | 显示全部楼层
约定的童话 发表于 2021-2-27 23:11
小试牛刀一下。。。

没看到代码。

TA的精华主题

TA的得分主题

发表于 2021-2-28 10:05 | 显示全部楼层
rel.PNG

Sub ExtraTxtData()
Dim fso As Object
Dim reg As Object
Dim fd As Object
Dim rel As Object
Dim r As Long: Dim m As Long
Dim fileName As String: Dim name_txt As String: Dim s As String
  fileName = ActiveWorkbook.Path
  Set fso = CreateObject("scripting.filesystemobject")
  Set reg = CreateObject("vbscript.regexp")
  Set fd = fso.getfolder(fileName)
       For Each fl In fd.Files
           If UCase(fso.GetExtensionName(fl)) = "LOG" Then
               Set tx = fso.opentextfile(fl, 1)
               name_txt = fso.getbasename(fl)
                s = tx.ReadAll
                With reg
                .Pattern = "(b*.+)原始数据+(.+)\n"
                .ignorecase = True
                .Global = True
                Set rel = .Execute(s)
                End With
                If rel.Count > 0 Then
                  For m = 0 To rel.Count - 1
                   r = Cells(Rows.Count, "A").End(xlUp).Row
                   Cells(r + 1, "A") = Application.Substitute(Left(name_txt, 10), "-", "")
                   Cells(r + 1, "b") = rel(m).submatches(0)
                   Range(Cells(r + 1, "c"), Cells(r + 1, "g")) = joinSTR(rel(m).submatches(1))
                  Next m
                End If
           End If
           Set fl = Nothing
       Next

       Set fso = Nothing
       Set fd = Nothing
       Set reg = Nothing
End Sub

Function joinSTR(str As String)
      Dim ar_rel
      Dim ar(4)
     ar_rel = Split(str, " ")
      ar(0) = "'" & Right(ar_rel(7), 1) & Right(ar_rel(8), 1) & Right(ar_rel(9), 1) & Right(ar_rel(10), 1)
      ar(1) = "'" & ar_rel(11)
      ar(2) = "'" & Right(ar_rel(12), 1) & Right(ar_rel(13), 1) & Right(ar_rel(14), 1)
      ar(3) = "'" & Right(ar_rel(15), 1) & Right(ar_rel(16), 1)
      ar(4) = "'" & Right(ar_rel(17), 1) & Right(ar_rel(18), 1)
    joinSTR = ar
End Function

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2021-2-28 11:29 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
已上传,未审核

TA的精华主题

TA的得分主题

发表于 2021-2-28 12:29 | 显示全部楼层
Sub TEST_A1()
Dim PH$, F$, T$, SR, X$(1 To 5), i&, j%, r&
PH = ThisWorkbook.Path & "\"
Do
   If F = "" Then F = Dir(PH & "2021-??-??-Pic.log") Else F = Dir
   If F = "" Then Exit Do
   Open PH & F For Input Access Read As #1
   Do While Not EOF(1)
         Line Input #1, T
         If Not T Like "*" & Trim(Application.Rept("## ", 21)) & "*" Then GoTo 101
         SR = Split(" " & Right(Trim(T), 62), " ")
         For i = 8 To 20
             j = Application.Match(i, [{8,12,13,16,18}])
             X(j) = X(j) & Right(SR(i), IIf(i = 12, 2, 1))
         Next i
         Cells(r + 1, 1) = Replace(Left(F, 10), "-", "") & " " & Left(T, 8) & " " & Join(X, " ")
         r = r + 1: Erase X()
101: Loop
   Close #1
Loop
End Sub


评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-2-28 13:36 | 显示全部楼层
本帖最后由 mudao 于 2021-2-28 20:38 编辑
kzg2013 发表于 2021-2-28 11:29
已上传,未审核


简单试了一下,功能正常。谢谢!这个是运行速度很快。

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-2-28 13:39 | 显示全部楼层
约定的童话 发表于 2021-2-27 23:11
Sub 提取log()
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

您的代码很简洁,但我运行时提示ReadXML子过程或者函数未定义。本人白的很,用的是WPS,请教如何解决,谢谢!

TA的精华主题

TA的得分主题

发表于 2021-2-28 14:15 | 显示全部楼层
mudao 发表于 2021-2-28 13:39
您的代码很简洁,但我运行时提示ReadXML子过程或者函数未定义。本人白的很,用的是WPS,请教如何解决,谢 ...

ReadXML这个百度上的代码,忘记发了,你百度找下凑上去用

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-2-28 16:09 | 显示全部楼层
准提部林 发表于 2021-2-28 12:29
Sub TEST_A1()
Dim PH$, F$, T$, SR, X$(1 To 5), i&, j%, r&
PH = ThisWorkbook.Path & "\"

代码正常通过,如果能分列就更好了。谢谢
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-20 22:24 , Processed in 0.051628 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表