将CSV组合在一个具有相似行和不同列的CSV中

时间:2013-04-16 15:11:09

标签: csv vbscript

我有多个从数据库查询生成的csv文件

\ n用于下面的文字

中的新行字符

收到格式 -

Month1.csv

ID,User,Year,Month1,Month2,Month3,...,MonthN \ n 2,User2,2012,12 \ n 1,User1,2011,5 \ n 4,User5,2014,56 \ n 3,User4,2013,34 \ n

Month2.csv ID,User,Year,Month1,Month2,Month3,...,MonthN \ n 1,User1,2011,10 \ n 2,User2,2012,66 \ n 3,User4,2013,40 \ n 4,User5,2014,26 \ n

Month3.csv ID,User,Year,Month1,Month2,Month3,...,MonthN \ n 4,User5,2014,67 \ n 1,User1,2011,12 \ n 3,User4,2013,23 \ n 2,User2,2012,11 \ n

此处col1,Col2和Col3在每个CSV中相同但行序列不相同。

我将所有这些CSV放在同一个文件夹中所需的格式csv与不同名称的ID,User,Year,Month1,Month2,Month3,...,MonthN,其中数据可用col1(ID),Col2(用户)和Col3(年)

我想创建特定格式的CSV文件 -

所需格式 - ID,User,Year,Month1,Month2,Month3,...,MonthN \ n 1,User1,2011,5,10,12,...,50 \ n 2,User2,2012,12,66,11,...,12 \ n 3,User4,2013,34,40,23,...,13 \ n 4,User5,2014,56,26,67,...,52 \ n

我想在VBS中使用该解决方案,因此我们可以在任何Windows机器上执行它而无需任何额外的软件。任何人都可以帮助我

2 个答案:

答案 0 :(得分:0)

使用filesystems对象打开每个CSV并忽略第一行迭代它们。

然后您可以使用“,”作为分隔符使用拆分。

如果您需要比较前3个字段并仅输出唯一项,那么您可以使用字典对象。一旦你的sting被拆分,将所有3个字段添加到一个字符串中,检查它是否在你的字典对象中,如果没有写出来并添加到字典中。如果它被忽略并继续。

希望有所帮助

答案 1 :(得分:0)

将第一张CSV复制到所需的新文件名。从彼此CSV中读取内容并将其拆分为vbLf。跳过数组的第一个字段(包含标题),并将其余字段附加到目标CSV。有点像这样:

Set fso = CreateObject("Scripting.FileSystemObject")

isFirst = True
For Each f In fso.GetFolder("C:\folder").Files
  If isFirst Then
    f.Copy "AllMonths.csv"
    isFirst = False
  Else
    Set csv = fso.OpenTextFile("AllMonths.csv", 8)
    lines = Split(f.OpenAsTextStream.ReadAll, vbLf)
    For i = 1 To UBound(lines)
      csv.Write lines(i) & vbLf
    Next
    csv.Close
  End If
Next