我实际上是在编写脚本以删除12'000行的CSV文件中的重复项。我知道此文件在userid和/或card_number上具有重复项,其格式如下:
userid, fistname, lastname, card_number
=======================================
1234, toto, help, 111111
1234, toto, help, 111111
AND
1234, toto, help, 111111
5678, user, user2, 111111
我想逐行阅读这些行,然后将它们添加到字典对象中(如果它们已经存在的话),然后将剩余的行写到另一个文件中,并将字典导出到日志文件中。
使用fso对象创建/打开/写入/保存文件的编码功能正在起作用。
我无法恢复似乎无效的字典方法。
我对如何导出词典一无所知,或者可能仅仅是因为词典无法正常工作。
我已经对stackoverflow,ssh64或Expert-exchange进行了大量研究以找到解决方案,但是我被阻止了,我想我的脚本就差不多了,但是任何帮助都将不胜感激。
```
`
`This is the dictionary part to record duplicates
`in a file and remove them from the destination file
`
```
`
`# Declares required variables
Dim objFSO, objFolder, objShell, objTextFile, objFile
Dim strDirectory, CurDir, InputFile, OutputFile
Dim strInput, strFile
Dim dictionary, it
`# Here we go !
Set objFSO = Createobject("Scripting.FileSystemobject")
Set OutputFile = objFSO.CreateTextFile(CurDir & ".\myCSVfile.csv", 2, true)
Set objFile = objFSO.OpenTextFile(CurDir & InputFile, 1)
`# Reads the file until the end
Do Until objFile.AtEndOfStream
strInput = objFile.ReadLine()
strInput = Trim(strInput)
If Len(strInput) > 0 Then
'WScript.Echo strInput
'OutputLog.Writeline strInput
'Quit
End If
`# Test if it already exists, if YES, it's a duplicate
If Not dictionary.exists(strInput) Then
OutputFile.Writeline strInput
Else
dictionary.add strInput, null
If dictionary.Count >= 0 Then
objTextFile.Write dictionary.items
Else
objTextFile.Write "There are " & dictionary.Count & " duplicated data in the file."
End If
End if
Loop
`# Populate the log file with the duplicated entries
For Each it In dictionary
.Item = it & "" & dictionary(it)
objTextFile.Writeline .Item
Next
预期结果: -要填充重复项的字典 -要复制的日志文件 -要从最终文件中删除重复项
实际结果: -打开输入文件 -读取输入文件 -创建输出文件 -写入输出文件 -打开日志文件 -写入日志文件
答案 0 :(得分:0)
每个字典值都需要一个键,因此,如果将输入中的每一行都当作一个键,并为该值复制它,这是使其工作的一种非常简单的方法。设置清理代码比处理代码本身更多。顺便说一句,如果您想变得更复杂,则可以传入数组作为字典值。并遍历字典和数组的值,但看起来好像只是想比较行。
dict.Add "Key", Split(line, ",")
我使用了您的示例,6个中的4个应该是唯一的:
Option Explicit
Dim fso : set fso = CreateObject("Scripting.FileSystemObject")
Dim fileIn : set fileIn = fso.OpenTextFile("c:\users\user\desktop\input.txt")
Dim fileOut : set fileOut = fso.OpenTextFile("c:\users\user\desktop\output.txt", 2, true) ' for writing/create
Dim dictlog : set dictlog = fso.OpenTextFile("c:\users\user\desktop\dictlog.txt", 2, true) ' for writing/create
Dim dict : set dict = CreateObject("Scripting.Dictionary")
Dim key
dim line
Do Until fileIn.AtEndOfStream
key = fileIn.ReadLine
line = key
if Not dict.exists(key) Then
dict.Add key, line
fileOut.WriteLine line
else
dictLog.WriteLine line
end if
Loop
fileIn.Close
fileOut.Close
dictlog.Close
Set fso = Nothing
Set fileIn = Nothing
Set fileOut = Nothing
Set line = Nothing
Set dict = Nothing
set dictlog = Nothing