ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] 提速,提取4000多个txt,耗时56.39秒,谢谢prome3、wanghan519、lxdexcel等诸位老师!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-2-10 15:55 | 显示全部楼层 |阅读模式
本帖最后由 lhj323323 于 2024-2-13 19:19 编辑

由于受论坛限制,单个附件不得超过2M
只好不断减少附件到1.8M

提取规则,是每个txt里,【距今天最近的一天】的【第一分钟】的数据
即,一个txt,只占用excel的一行。
速度.rar (1.88 MB, 下载次数: 122)

快照8.png

快照9.png

老师如有空,请帮忙看看,还有没有提速的可能。
顺祝新年快乐!






TA的精华主题

TA的得分主题

发表于 2024-2-10 17:36 | 显示全部楼层
本帖最后由 wanghan519 于 2024-2-10 17:46 编辑

把txt文件又复制粘贴了两次,共123个文件,用grep直接提取到csv文件,耗时0.07秒左右,如果加上获取倒数第一行第一列的日期再grep,则在0.1-0.2秒左右123个文件
批注 2024-02-10 173218.jpg
用的是2019年的轻薄本,不足以玩任何大型游戏,在linux环境下rg处理123个文件耗时约0.015秒,算是目前我试出来最快的了

20240210-174225.png

TA的精华主题

TA的得分主题

发表于 2024-2-10 18:05 | 显示全部楼层
本帖最后由 ykcbf1100 于 2024-2-10 18:26 编辑

我用Workbooks.Open试了一下,发现速度比你自己的要慢得多,我这里要10多秒,而你的代码在我这里只要0.06秒,你还是用自己的代码吧。

附件你就参考一下吧。。。

速度.7z

1.44 MB, 下载次数: 11

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-2-10 18:57 | 显示全部楼层
ykcbf1100 发表于 2024-2-10 18:05
我用Workbooks.Open试了一下,发现速度比你自己的要慢得多,我这里要10多秒,而你的代码在我这里只要0.06秒 ...

谢谢老师回复!

我都把饭吃过了,程序还在运行

有没有如下这种可能,
某个路径内的若干txt,
我们看到的是一个一个独立的文档
而站在上帝视角
【它们整体】仍属一个相同格式的大文档中的不同的段落
只不过它们以【句号】作为分割标识
而我们按常规手法,就需要先解开【句号】,才能打开它。

而上帝视角,则不需要打开它。(这样就会节省很多【打开/关闭】这种步骤)

乱说一通,请别笑话

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-2-10 18:58 | 显示全部楼层
wanghan519 发表于 2024-2-10 17:36
把txt文件又复制粘贴了两次,共123个文件,用grep直接提取到csv文件,耗时0.07秒左右,如果加上获取倒数第 ...

老师:

2楼的代码,它与VBA是什么关系,是升级版吗?
这点,我不懂,还请告知。

TA的精华主题

TA的得分主题

发表于 2024-2-10 18:59 | 显示全部楼层
lhj323323 发表于 2024-2-10 18:58
老师:

2楼的代码,它与VBA是什么关系,是升级版吗?

二楼是bat 批处理方式

TA的精华主题

TA的得分主题

发表于 2024-2-10 19:30 | 显示全部楼层
  1. Sub test3() '比你的电脑快,江哥换机吧
  2.   Dim strFileName$, strPath$, n As Byte
  3.   Dim vResult$(), ar, br, y&, x&, j&, r&
  4.   Dim t As Single
  5.   Application.ScreenUpdating = False
  6.   t = Timer
  7.   ReDim vResult(1 To 6000, 8)
  8.   strPath = ThisWorkbook.Path & "\"
  9.   strFileName = Dir(strPath & "*.txt")
  10.   
  11.   Do Until strFileName = ""
  12.     n = FreeFile
  13.     Open strPath & strFileName For Input As #n
  14.     ar = Split(StrConv(InputB(LOF(n), #n), vbUnicode), vbCrLf)
  15.     Close #n
  16.     r = r + 1
  17.     vResult(r, UBound(vResult, 2)) = Mid(strFileName, 4, 6)
  18.     For y = UBound(ar) - 2 To 1 Step -1 '倒着判断,这样速度可能有所提升,以下为猜测
  19.       'If Split(ar(y), vbTab)(0) > Split(ar(y - 1), vbTab)(0) Then
  20.       If Left(ar(y), 10) > Left(ar(y - 1), 10) Then '比上面的split 快点
  21.         br = Split(ar(y), vbTab)
  22.         For j = 0 To UBound(br)
  23.           vResult(r, j) = br(j)
  24.         Next j
  25.         Exit For '满足则退出循环
  26.       End If
  27.     Next y
  28.     strFileName = Dir
  29.   Loop
  30.   With Sheets("Sheet1")
  31.     .[a2].Resize(r, UBound(vResult, 2) + 1) = vResult
  32.     .Range("K1") = Timer - t ' 输出时间
  33.   End With
  34.   Application.ScreenUpdating = True
  35.   Beep
  36. End Sub
复制代码

评分

3

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-2-10 19:33 来自手机 | 显示全部楼层
lhj323323 发表于 2024-2-10 18:58
老师:

2楼的代码,它与VBA是什么关系,是升级版吗?

是批处理方式,耗时比较少可以当成参考
vba可以调用批处理,再读取结果,速度也挺快
理论上vb可以很基础的处理文本,seek之类,应该可以更快,但我不太会。。。
rg是近年来火热的,用rust重写基础工具里,用来从大量文本里找内容的工具,貌似比grep还快,而过去grep一直作为批量处理大量文本的速度基准,rg比它还快,我也想不出写起来简单的、速度更快的处理大量文本的方式了

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-2-10 19:36 | 显示全部楼层
wanghan519 发表于 2024-2-10 19:33
是批处理方式,耗时比较少可以当成参考
vba可以调用批处理,再读取结果,速度也挺快
理论上vb可以很基 ...

谢谢老师指点

用什么来执行批处理?

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-2-10 19:37 | 显示全部楼层
闻启学 发表于 2024-2-10 18:59
二楼是bat 批处理方式

谢谢告知!                        
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-1 16:54 , Processed in 0.043972 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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