我有两个csv文件,一个有四列,另一个有四列,例如
File 1 File 2
ID,Contry,state,amt ID,Contry,state,amt
1,US,01,7 13,AU,0,7
2,UK,11,7 11,UK,0,7
3,AF,10,7 10,AF,0,7
4,US,08,7 14,SG,0,7
我需要两个将文件1的后两列与file2的前两个库进行比较,并使用vbscript删除file2中匹配行的重复项。例如,输出需要
file3
ID,Contry,state,amt
13,AU,0,7
14,SG,0,7
示例代码会很有帮助。
答案 0 :(得分:0)
使用.CSV的标准方法是使用ADO /文本驱动程序(参见here)。如果数据很有趣,或者规格对于漂亮的SQL语句来说过于模糊(或者之前从未使用过SQL),那么涉及FileSystemObject,字符串操作和字典的hack可以接受将不同值存储在第一个文件的第二列中:
Dim oFS : Set oFS = CreateObject("Scripting.FileSystemObject")
Dim dicC : Set dicC = CreateObject("Scripting.Dictionary")
Dim tsOut : Set tsOut = oFS.CreateTextFile("..\data\25909493-3.txt")
Dim tsIn
Set tsIn = oFS.OpenTextFile("..\data\25909493-1.txt")
tsOut.WriteLine tsIn.ReadLine() ' header
Do Until tsIn.AtEndOfStream
dicC(Split(tsIn.ReadLine(), ",")(1)) = 0 ' col 2 into dicC.Keys
Loop
tsIn.Close
WScript.Echo "to filter:", Join(dicC.Keys(), ", ")
Set tsIn = oFS.OpenTextFile("..\data\25909493-2.txt")
tsIn.ReadLine
Do Until tsIn.AtEndOfStream
Dim sLine : sLine = tsIn.ReadLine()
If Not dicC.Exists(Split(sLine, ",")(1)) Then
tsOut.WriteLine sLine
End If
Loop
tsIn.Close
tsOut.Close
WScript.Echo "..\data\25909493-3.txt:"
WScript.Echo oFS.OpenTextFile("..\data\25909493-3.txt").ReadAll()
输出:
to filter: US, UK, AF
..\data\25909493-3.txt:
ID,Contry,state,amt
13,AU,0,7
14,SG,0,7