2012-12-21 81 views
2

我有一種情況,需要將四個CSV文件合併到一個CSV文件中。這很容易,如果我只是想一個接一個地添加它們,但我需要讓它們並排在CSV文件中。我知道所有四個文件具有相同數量的條目(在1000條目範圍內)。我一直在研究下面的代碼,它適用於小文件,但對於長文件來說效率極低。有沒有更簡單的方法來完成相同的任務?使用批處理文件將多個.csv文件合併爲一個.csv文件

@echo off 
setlocal enabledelayedexpansion 
Set R=1 
Set T=1 
Set Y=1 
Set U=1 
for /f %%a in (test1.txt) do (
    set I=!R! 
    for /f %%b in (test2.txt) do (
     set J=!T! 
     for /f %%c in (test3.txt) do (
      set K=!Y! 
      for /f %%d in (test4.txt) do (
       set L=!U! 
       If !I!==!J! If !J!==!K! If !K!==!L! echo %%a,%%b,%%c,%%d >> TestComplete.txt 
       Set /a U=U+1 
      ) 
      Set U=1 
      Set /a Y=Y+1 
     ) 
     Set Y=1 
     Set /a T=T+1 
    ) 
    Set T=1 
    Set /a R=R+1 
) 

注:我知道我粘貼的代碼是使用.txt文件而不是.csv文件。我假設一個人會爲另一個人工作。

再說一遍,只要文件很小,上面的代碼看起來效果很好。當文件(在這種情況下爲test1.txt)有大約1000行文本時,我遇到了麻煩(當然)。

+0

文件是否有標題?如果不是,您可以簡單地使用複製命令來合併它們。 –

+0

@a_horse_with_no_name:那會做「union all」。但他們想要一種「加入rownum」。 –

回答

2

​​,Windows的GNU(Unix like)工具的端口集合,包含paste,它完全符合您的需求。不過,我覺得你更喜歡本機Windows的答案,我已經提出了一個,但它並不漂亮。與@walid2mi's clever solution開始和分拆下來到coljoin.bat:

@echo off 
setlocal enabledelayedexpansion 
for /f "delims=" %%a in (%1) do (
    set /p line= 
    echo !line!, %%a 
) 

你可以加入四個文件有:

type a.txt | coljoin b.txt | coljoin c.txt | coljoin d.txt > TestComplete.txt 

要求應與文件長度增加而線性增加,避免您的解決方案的經濟增長大幅減速時間。但是,當所有文件沒有相同數量的行時,此解決方案的失敗模式並不好。通常會提示用戶輸入缺失的行。