Board logo

标题: [问题求助] VBS如何批量处理csv文件中文本文字的替换? [打印本页]

作者: whxj2004    时间: 2012-12-12 21:59     标题: VBS如何批量处理csv文件中文本文字的替换?

我有一大批csv,里面很多文本需要替换;例如:
1.csv,2.csv......中,我要将所有的JAN替换成01;FEB替换成02......依次类推到DEC替换为12!

还请高手指点下如何写这段VBS,我的CSV文件很大,每个都有几万条数据;每天要转换100多个这种CSV,还请高手解惑!万分感谢!
作者: czjt1234    时间: 2012-12-13 09:37

本帖最后由 czjt1234 于 2012-12-13 09:41 编辑

直接替换当前目录下所有.csv文件里的数据,不做备份
请先在新建文件夹里试验

其中 strPath 可自定义路径
  1. Dim Month(11,1), strRead
  2. strPath = CreateObject("Wscript.Shell").CurrentDirectory
  3. Month(0,0) = "Jan" : Month(0,1) = "01"
  4. Month(1,0) = "Feb" : Month(1,1) = "02"
  5. Month(2,0) = "Mar" : Month(2,1) = "03"
  6. Month(3,0) = "Apr" : Month(3,1) = "04"
  7. Month(4,0) = "May" : Month(4,1) = "05"
  8. Month(5,0) = "Jun" : Month(5,1) = "06"
  9. Month(6,0) = "Jul" : Month(6,1) = "07"
  10. Month(7,0) = "Aug" : Month(7,1) = "08"
  11. Month(8,0) = "Sep" : Month(8,1) = "09"
  12. Month(9,0) = "Qct" : Month(9,1) = "10"
  13. Month(10,0) = "Nov" : Month(10,1) = "11"
  14. Month(11,0) = "Dec" : Month(11,1) = "12"
  15. Set objFSO = CreateObject("Scripting.FileSystemObject")
  16. Set objFolder = objFSO.GetFolder(strPath)
  17. set objFiles = objFolder.Files
  18. for Each objFile In objFiles
  19.     If LCase(Right(objFile.Name, 3)) = "csv" Then
  20.         With objFSO.OpenTextFile(objFile.Name, 1)
  21.             strRead = .ReadAll
  22.             .Close
  23.         End With
  24.         For i = 0 To 11
  25.             With New RegExp
  26.                 .IgnoreCase = True
  27.                 .Global = True
  28.                 .Pattern = Month(i,0)
  29.                 strRead = .Replace(strRead, Month(i,1))
  30.             End With
  31.         Next
  32.         With objFSO.OpenTextFile(objFile.Name, 2)
  33.             .Write strRead
  34.             .Close
  35.         End With
  36.         Msgbox objFile.Name & " 替换完毕。"
  37.     End If
  38. Next
复制代码

作者: apang    时间: 2012-12-13 10:45

也来一个
  1. Arr = Array("Jan","Feb","Mar","Apr","May","Jun",_
  2. "Jul","Aug","Sep","Oct","Nov","Dec")
  3. Set FSO = CreateObject("Scripting.FileSystemObject")
  4. For Each File in FSO.GetFolder(".").Files
  5.    Ext = FSO.GetExtensionName(File)
  6.    If Lcase(Ext) = "csv" Then MySub
  7. Next
  8. MsgBox "OK"
  9. Sub MySub()
  10.    Set F = FSO.OpenTextFile(File,1)
  11.    Text = F.ReadAll :F.Close
  12.    For i = 0 To Ubound(Arr)
  13.       Set Re = New RegExp
  14.       Re.Pattern = Arr(i)
  15.       Re.Global = True
  16.       Re.IgnoreCase = True
  17.       Text = Re.Replace(Text,Right("0"&i+1,2))
  18.    Next
  19.    Set F = FSO.OpenTextFile(File,2)
  20.    F.Write Text :F.Close
  21.    Set F = Nothing
  22. End Sub
复制代码

作者: whxj2004    时间: 2012-12-14 15:13

本帖最后由 whxj2004 于 2012-12-14 15:27 编辑

非常好用,感谢2位!简直帮了我大忙!运行很快!

但是出现新问题了:
原来csv中的日期,例如:01-May-12,是2012-05-01。
转换后,显示为01-05-12,使用excel打开识别为,2001-05-12,头大!

高人们,有没有更加好些的办法?
作者: czjt1234    时间: 2012-12-14 16:11

要不把-12也替换为-2012




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2