我正在尝试编写一个脚本,该脚本接受一个文本文件并读取它以查找任何重复值。下面的代码将重复项写入文本文件,将重复项的值写入文本文件。但是,如何在单独的值上没有任何重复的情况下编写值。
Const ForReading = 1
Const ForWriting = 2
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("C:\Users\A352592\Desktop\predata.txt",
ForReading)
Set objOutputFile = objFSO.OpenTextFile("C:\Users\A352592\Desktop
\Noduplicates.txt", 2, True)
Set objOutputFile2 = objFSO.OpenTextFile("C:\Users\A352592\Desktop
\Duplicates.txt", 2, True)
Set objOutputFile3 = objFSO.OpenTextFile("C:\Users\A352592\Desktop
\alone.txt", 2, True)
Set Dict = CreateObject("Scripting.Dictionary")
Do until objFile.atEndOfStream
strCurrentLine = objFile.ReadLine
If not Dict.Exists(strCurrentLine) then
objOutputFile.WriteLine strCurrentLine
Dict.Add strCurrentLine,strCurrentLine
ElseIf Dict.Exists(strCurrentLine) then
objOutputFile2.WriteLine strCurrentLine
Else
objOutputFile3.WriteLine strCurrentLine
End if
Loop
wscript.echo "Finished"
答案 0 :(得分:1)
使用关联的词典条目保持计数。每次匹配一行时,增加字典中的计数。当您完成阅读文件后,再次浏览字典并输出计数为1的每一行。
或者,您可以对文件进行排序并按顺序执行。我的vbscript技能已经萎缩,但总体思路是:
string prevLine = read first line
bool isDup = false
for each remaining line
if (line != prevLine)
if (!isDup)
line has no duplicates
prevLine = line
isDup = false
else
isDup = true
要对文件进行排序,请查看Windows SORT program。
如果您可以安装GNU / Linux实用程序,请查看sort
和uniq
。他们会让你这样做,而无需编写任何代码。
答案 1 :(得分:1)
在读取输入时,您无法在没有重复的情况下检测/写入唯一身份/榆树 - 最后一行可能使某个元素不唯一。因此计算输入循环期间的元素,然后将分类的元素写入不同的文件。
代码说明:
>> a = Split("a b c a b b")
>> Set d = CreateObject("Scripting.Dictionary")
>> For Each e In a
>> d(e) = d(e) + 1
>> Next
>>
>> For Each e In d.Keys
>> WScript.Echo d(e), e
>> Next
>>
2 a
3 b
1 c