[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
帖个VBA的.
  1. Option Explicit
  2. Sub Try()
  3.     Dim lngRow As Long, i As Integer, objFso As Object, objFolder As Object, arrData, _
  4.         objFl As Object, objOpFl As Object, strPth As String, intCol As Integer, strTime As String, intSh As Integer
  5.     strPth = "f:\zhubi"     '在此指定要处理的目标文件夹
  6.     Set objFso = CreateObject("scripting.filesystemobject")
  7.     If objFso.folderexists(strPth) = False Then
  8.         MsgBox "文件夹" & Chr(34) & strPth & Chr(34) & "不存在!!!" & Chr(10) & vbCrLf & _
  9.             "请按 Alt + F11 打开 VBE 编辑器指定新的路径...", 48, " :("
  10.         Set objFso = Nothing
  11.         Exit Sub
  12.     End If
  13.     strTime = Time
  14.     intSh = 1
  15.     Sheets(intSh).Select
  16.     Application.ScreenUpdating = False
  17.     Range("a1:iv65536").ClearContents
  18.     Cells(1, 1) = "名称": Cells(1, 2) = "日期"
  19.     Set objFolder = objFso.getfolder(strPth)
  20.     Set objOpFl = objFso.opentextfile(strPth & "\" & "内盘笔4.txt", 1)
  21.     lngRow = 1: intCol = 2
  22.     Do Until objOpFl.atendofstream
  23.         arrData = Split(objOpFl.readline, vbTab, -1, 1)
  24.         lngRow = lngRow + 1
  25.         Cells(lngRow, 1) = arrData(0): Cells(lngRow, 2) = arrData(1)
  26.     Loop
  27.     objOpFl.Close
  28.     For Each objFl In objFolder.Files
  29.         If objFso.GetExtensionName(strPth & "\" & objFl.Name) = "txt" Then
  30.             Set objOpFl = objFso.opentextfile(strPth & "\" & objFl.Name)
  31.             lngRow = 1: intCol = intCol + 1
  32.             If intCol > 256 Then
  33.                 intCol = 1: intSh = intSh + 1
  34.                 For i = 1 To 256
  35.                     Columns(i).AutoFit
  36.                 Next i
  37.                 Sheets(intSh).Select
  38.             End If
  39.             Cells(1, intCol) = objFso.GetbaseName(objFl.Name)
  40.             Do Until objOpFl.atendofstream
  41.                 arrData = Split(objOpFl.readline, vbTab, -1, 1)
  42.                 lngRow = lngRow + 1
  43.                 Cells(lngRow, intCol) = arrData(2)
  44.             Loop
  45.             objOpFl.Close
  46.         End If
  47.     Next
  48.     Set objFso = Nothing: Set objFolder = Nothing: Set objOpFl = Nothing
  49.     For i = 1 To Range("iv1").End(xlToLeft).Column
  50.         Columns(i).AutoFit
  51.     Next i
  52.     Application.ScreenUpdating = True
  53.     MsgBox strTime & vbCrLf & Time & Chr(10) & "Done!", 0, "Right?"
  54. End Sub
复制代码
在本机上就楼主上传的附件,用namejm的批代码要几分钟时间,而VBA仅一两秒钟,效率简直一个天一个地...

代码贴错了,改一改...

TOP

又是一个挑战效率的文本题
想起好像有个 Hitme 前辈,
初学批处理时看到他的代码经常使用大量的临时文件来完成任务,现也模仿下 ^_^
我理解题意为:结果文件将会有262列,每列为某单个文件的第3列
思路:
  先生成260个临时文件,以文本的第1、2列为文件名,第3列为内容
  再将所有文件合为一个文件,将单个文件的所有内容合为一行即可
  
创建测试环境太麻烦,故代码未经测试,只是想当然 ^_^
若楼主回头看见此帖,还请测试后回复一下结果是否正确,且耗时如何。
此代码只有针对性没有通用性,是专对楼主题意解的。
  1. @echo off
  2. set var=内盘 外盘 内盘笔 外盘笔 委买 委卖 委买笔 委卖笔
  3. md tem
  4. for %%i in (%var%) do (
  5.    for /l %%L in (1 1 31) do (
  6.       for /f "tokens=1-3" %%a in (%%i%%L.txt) do >>"tem\%%a %%b.txt" echo %%c
  7.     )
  8. )
  9. set num=内盘成交笔数 内盘成交量 内盘单笔最大成交量 外盘成交笔数 外盘成交量 外盘单笔最大成交量
  10. set num=%num% 委托买入总量 委买总笔 委买单笔最大成交量 委托卖出总量 委卖总笔 委卖单笔最大成交量
  11. set /p=名称 日期 %var% %num%<nul>test.txt
  12. for %%i in (%num%) do (
  13.    for /f "tokens=1-3" %%a in (%%i.txt) do >>"tem\%%a %%b" echo %%c
  14. )
  15. set lj=%cd%
  16. cd/d tem
  17. for %%i in (*.txt) do (
  18.    set/p=%%~ni<nul>>"%lj%\test.txt"
  19.    for /f "usebackq delims=" %%a in ("%%i") do set /p= %%a<nul>>"%lj%\test.txt"
  20.    echo;
  21. )
  22. cd..
  23. rd /s /q tem
  24. start test.txt
复制代码

[ 本帖最后由 随风 于 2010-5-3 18:04 编辑 ]
技术问题请到论坛发帖求助!

TOP

原帖由 more 于 2010-5-2 12:43 发表
帖个VBA的.Option Explicit

Sub Try()
    Dim lngRow As Long, i As Integer, objFso As Object, objFolder As Object, arrData, _
        objFl As Object, objOpFl As Object, strPth As String, intCol As ...

感谢关注,附上测试结果,excel2007运行19秒完成所有文件,还未看正确性,就效率而言,牛!!!!!

[ 本帖最后由 w96692 于 2010-5-3 14:02 编辑 ]

TOP

原帖由 随风 于 2010-5-2 22:57 发表
又是一个挑战效率的文本题
想起好像有个 Hitme 前辈,
初学批处理时看到他的代码经常使用大量的临时文件来完成任务,现也模仿下 ^_^
我理解题意为:结果文件将会有262列,每列为某单个文件的第3列
思路:
  先生 ...
我看您理解的意思也对,但代码不能运行,不知何故?(放到别的盘下运行出一个有表头的txt文本,放到zhubi文件夹下不运行)

TOP

返回列表