2014-06-24 78 views
-1

我正在嘗試編寫一個帶有文本文件的腳本,並將其讀取以查找任何重複的值。下面的代碼將重複項寫入文本文件,並將重複項的值寫入文本文件。但是,我將如何在沒有任何重複值的情況下寫入值。如何在文本文件中找到重複項並將沒有重複項的值寫入文本文件?

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" 

回答

1

在閱讀輸入時,您無法在飛行/不使用dups的情況下檢測/寫入獨特/榆樹 - 最後一行可能會使元素不唯一。因此,計數在輸入循環中的元素,然後將分類的元素寫入不同的文件。

代碼來說明:

>> 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 
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。他們會讓你這樣做,而不必編寫任何代碼。

相關問題