Stack Overflow、私はこの問題について午前中吹き飛ばしました。私はスクリプトで同僚を助けようとしています。彼はプログラマーではありません。インターネットからコードをコピーして、希望する結果が得られるようにコードを変更するように依頼しました。私はそれを熟読し、不要な部分をすべて廃棄して書き直したので、私が理解できる方法でやりたいことができました。私は正直に言うと、同僚が修正が必要なVBscriptを持っている場合、これらのコンテキストでのみ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
かなりしっかりしているようですね。入力ファイルによっては正常に動作します。したがって、ここに問題があります。それは魅力のように機能することもあれば、混乱して、すべての非数値エントリを単一の別個のnullとして報告することもあります。
正常に機能する2つの入力例を次に示します。
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
ただし、他の多くの入力により、この特定のスクリプトがTypeMismatchエラーでクラッシュします。objFile.WriteをWscript.echoと交換すると、objRecordSetがnullを返していることがわかります。
このエラーを再現するための最も簡単な入力は次のとおりです。
1
1
a
a
この入力をエコーアウトすると、次のようになります。
null
1
基本的に、文字と数字の任意の組み合わせでこのエラーが発生します。すべての文字が単一のnullとして返され、数字は正常に出力されます。
これは私には非常に奇妙な行動のように思えます。RecordSetは、いくつかの数値がある場合にのみ数値を受け取ると結論付け、すべての文字をnull数値として破棄するように見えます。私の知る限り、文字のエントリの半分の数のエントリがある入力では、このエラーが発生します。
返されたすべてのアイテムを文字列として受け取るように指定する方法を決定できませんでした。この問題の解決策をどのように追求する必要がありますか?