Stack Overflow,我整个上午都在这个问题上搞砸了。我正在尝试用脚本帮助同事。他不是程序员,他只是从网上复制了一些代码,并让我修改它以获得他想要的结果。我仔细研究了它,废弃了所有不必要的部分并重写了它,所以它以我理解的方式做我想做的事。老实说,我只在这些情况下处理 VBscript,当同事有一个需要修复的时候。我在 VB6 中拥有我所有的 VB 经验。
该脚本的目的是获取一个以换行符分隔并可能填充重复条目的文本文件,并在删除所有重复项的情况下输出它。
Set objConnection = CreateObject("ADODB.Connection")
Set objRecordSet = CreateObject("ADODB.Recordset")
strPathToTextFile = "C:\Scripts\"
strFile = "Test.txt"
strOutputFile = "C:\this_is_the_output_changeme.txt"
Dim objFSO, objFile
Set objFSO = CreateObject("Scripting.FileSystemObject")
set objFile = objFSO.CreateTextFile(strOutputFile)
sql = "Select DISTINCT * FROM " & strFile
objConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & strPathtoTextFile & ";" & _
"Extended Properties=""text;HDR=NO;FMT=Delimited"""
objRecordSet.Open sql, objConnection
Do Until objRecordSet.EOF
objFile.Write(objRecordSet.Fields.Item(0).Value)
objFile.Write(vbCrLf)
objRecordSet.MoveNext
Loop
objFile.Close
看起来很结实对吧?它工作正常....取决于输入文件。所以这就是问题所在,有时它就像一个魅力,有时它会感到困惑并将所有非数字条目报告为单个不同的空值。
以下是两个可以正常工作的示例输入:
0
1
1
2
3
4
5
3
5
6
7
8
9
9
9
将输出:
0
1
2
3
4
5
6
7
8
9
这个输入
gray
grey
gray
graey
greay
grey
gray
greasy
greay
输出:
graey
gray
greasy
greay
grey
但是许多其他输入会导致此特定脚本因类型不匹配错误而崩溃。如果我用 Wscript.echo 替换 objFile.Write,我可以看到 objRecordSet 返回空值。
重新创建此错误的最简单输入是:
1
1
a
a
如果我回显这个输入,我会得到:
null
1
基本上任何字母和数字的组合都会产生这个错误。所有字母都作为一个空值返回,并且数字很好。
这对我来说似乎是非常奇怪的行为。似乎 RecordSet 得出结论,如果有一些数字值,它只会接收数字值,并将所有字母作为空数字抛出。据我所知,在任何输入的数字条目是字母条目的一半的情况下,它都会遇到此错误
我一直无法确定一种方法来指定以字符串形式接收所有返回的项目。我应该如何寻求解决这个问题的方法?