搜索和替换> VBS中的编号

时间:2013-07-24 17:43:37

标签: windows vbscript coding-style utf-16

我有一个Unicode TXT文件,我想用编号替换一些部分。 但它失败了,原因如下:

Line: 24
Character: 1
Code: 800A0005

这是我的VBS文件:

Ein = "D:\aaa\column.txt"
Aus = "D:\aaa\column-final.txt"
'Suchbegriff im RegEx-Format, daher: Punkt maskieren und zu ersetzenden Teil (=Nummer) in Klammern setzen
Such = "<TD>(XXXXX)</TD>"
N = 1 'Startwert für neue Nummerierung

Set fso = CreateObject("Scripting.FileSystemObject")
T1 = fso.OpenTextFile(Ein).ReadAll

Set rE = New RegExp
rE.Pattern = Such
rE.IgnoreCase = True
rE.Global = True

SP = 1 'Startposition im String
For Each M In rE.Execute(T1)
    P = M.FirstIndex + M.Length + 1 'Endposition des die Fundstelle enthaltenden Teilstrings
     'im gefundenen Teilstring (des Originaltextes) die bisherige Nummer ersetzen und zum neuen Text hinzufügen
    T2 = T2 & Replace(Mid(T1, SP, P - SP), M.SubMatches(0), N, 1, 1)
    N = N + 1
    SP = P 'Startposition = vorige Endposition
Next
T2 = T2 & Mid(T1, SP) 'den Teil nach der letzten Fundstelle auch noch mitnehmen
fso.CreateTextFile(Aus, true).Write T2

我很抱歉德语文本,希望你能读懂。

你能帮我找到错误吗?

1 个答案:

答案 0 :(得分:1)

问题是由于为ASCII编码打开/创建EinAus(FSO的默认设置)引起的。 “Microsoft VBScript运行时错误'800a0005'。无效的过程调用或参数”通常是由于要求.Write(Line)输出所选编码的非法内容。 (参见this answer

如果Ein是UTF-16,您可以在该模式下打开/创建文件(这些方法的编码参数);如果它是UTF-8,你可以使用ADODB.Stream进行I / O