如何在VBScript中将一个csv文件的两列与另一列进行比较

时间:2014-09-18 09:52:47

标签: regex csv dictionary vbscript

我有两个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

示例代码会很有帮助。

1 个答案:

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