Board logo

标题: [问题求助] 如何利用VBS脚本实现文本替换? [打印本页]

作者: xiaoxiami    时间: 2012-1-17 14:25     标题: 如何利用VBS脚本实现文本替换?

问题描述:
    用VBS实现一个简单的文本替换,现在有一个test.txt的文件,里面的内容如下:
    WITH,12345678,with,……
    想把WITH替换为Ab,并且with不受影响,也就是说,替换时需要区分大小写。望版上各位达人给个vbs的程序以实现我
    的目的。
顺便提问,VBS在执行替换的功能时是调用哪个exe来实现的呢?是cmd.exe么;还是说先调用notepad.exe打开test.txt,然后实现替换。
假如是后者,那么可以让其调用notepad++.exe打开这个test.txt吗?
    问题比较多,优先解决文本替换的程序问题(这个比较急),后面的问题可以慢慢讨论。

版上达人多多帮忙,小弟先行谢过了!
作者: Hello123World    时间: 2012-1-17 15:45

批处理调用cmd.exe,vbs一般调用WScript.exe.不应该说调用,应该说依赖吧。
作者: Demon    时间: 2012-1-17 15:52

Replace函数
作者: applba    时间: 2012-1-18 09:29

不论哪个编程语言,对字符串总是大小写敏感的。
  1. 替换字符串中的子字符串
  2. Replace Function
  3. 返回一个字符串,该字符串中一个指定的子字符串(substring)已被另外一个子字符串取代指定数量的次数。
  4. Replace(expression, find, replacewith[, start[, count[, compare]]])
  5. expression 字符串表达式,这是原始字符串,这个字符串中的某些子字符串将被替换。
  6. find 原始字符串中的某个子字符串,find指定的子字符串将被替换掉。
  7. replacewith 用来替换find子字符串的新子字符串。
  8. start,原始字符串中子字符串搜索开始的位置,也是从这个位置开始返回的。如果省略,默认值为 1。
  9.     count 执行子字符串替换的次数。如果省略,默认值为 -1,表示进行所有可能的替换。
  10. Compare 指示在处理子字符串时使用的比较类型。如果省略,默认值为 0 ,这意味着进行二进制比较。
  11. compare 参数可以有以下值:
  12. 常数 值 描述
  13. vbBinaryCompare 0 执行二进制比较。 默认值
  14. vbTextCompare 1 执行文本比较。
  15. Replace返回下面的值:
  16. 如果 ,返回
  17. expression 为零长度, 零长度字符串 ("")。
  18. expression 为Null,错误。
  19. find 是零长度, Copy of expression.
  20. replacewith 为零长度, Copy of expression with all occurrences of find removed.
  21. start > Len(expression) ,零长度字符串 ("")。
  22. count =0 , Copy of expression.
  23. Replace函数的返回值是一个字符串,并且从start指定的位置开始到expression的末尾结束进行过替换。
  24. 注意:It is not a copy of the original string from start to finish.
  25. 例子:
  26. Replace("XXpXXp", "p", "Y")   '返回 "XXYXXY"。
  27. Replace("XXpXXp", "p", "o",3)  '返回 "oXXo"。
  28. Replace("中国美国法国英国", "国", "guo3",3) ' 返回"美guo3法guo3英guo3"
  29. Replace("中国美国法国英国", "国", "guo3",5,1,vbTextCompare) '返回 "法guo3英国"
复制代码

作者: applba    时间: 2012-1-18 09:32

如果字符串是位于文本文件中,还需要用到FSO的textstream对象。
看楼主对概念如此模糊,需要多多充电。
作者: more    时间: 2012-2-9 22:58

本帖最后由 more 于 2012-2-9 23:04 编辑
  1. Option Explicit
  2. If WScript.Arguments.Count = 0 Then
  3. MsgBox "把要处理的文件拖到我身上就行了...", vbOKOnly, "友情提示..."
  4. WScript.Quit
  5. End If
  6. Dim strFile, objFso, objFile, objReg, ojbMtchs, objMtch, objFl, strRead, strSrc, strDst
  7. strSrc = "WITH"
  8. strDst = "Ab"
  9. strFile = WScript.Arguments(0)
  10. Set objFso = CreateObject("Scripting.FileSystemObject")
  11. With objFso
  12. Set objFile = .OpenTextFile(strFile, 1, False)
  13. Set objFl = .OpenTextFile(.GetSpecialFolder(2) & "\" & _
  14. .GetBaseName(strFile) & ".txt", 2, True)
  15. End With
  16. Set objReg = New RegExp
  17. With objReg
  18. .Global = True
  19. .IgnoreCase = False
  20. .Pattern = strSrc
  21. End With
  22. Do Until objFile.AtEndOfStream = True
  23. strRead = objFile.readline
  24. If objReg.Test(strRead) = True Then
  25. strRead = objReg.Replace(strRead, strDst)
  26. End If
  27. objFl.writeline strRead
  28. Loop
  29. objFile.close
  30. objFl.close
  31. With objFso
  32. .CopyFile .GetSpecialFolder(2) & "\" & .GetBaseName(strFile) & ".txt", strFile, True
  33. End With
  34. Set objReg = Nothing
  35. Set objFso = Nothing
  36. Set objFile = Nothing
  37. Set objFl = Nothing
  38. CreateObject("Wscript.Shell").Run "notepad " & strFile, 1
复制代码





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