如何在文本文件中查找重复项并将没有重复项的值写入文本文件?

时间:2014-06-24 15:38:48

标签: .net vbscript

我正在尝试编写一个脚本,该脚本接受一个文本文件并读取它以查找任何重复值。下面的代码将重复项写入文本文件,将重复项的值写入文本文件。但是,如何在单独的值上没有任何重复的情况下编写值。

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"

2 个答案:

答案 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实用程序,请查看sortuniq。他们会让你这样做,而无需编写任何代码。

答案 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