2

4 つの CSV ファイルを 1 つの CSV ファイルに結合する必要がある状況があります。それらを次々に追加したいだけならこれは簡単ですが、CSVファイルに並べて配置する必要があります。4 つのファイルすべてに同じ数のエントリがあることがわかっています (1000 エントリの範囲内)。私は、小さなファイルでは機能しますが、長いファイルでは非常に非効率的な次のコードに取り組んでいます。同じタスクを達成するためのより簡単な方法はありますか?

@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
)

注: 貼り付けたコードは、.csv ファイルではなく .txt ファイルを使用していることを知っています。一方に機能するものは、他方に機能すると思います。

繰り返しますが、ファイルが小さい限り、上記のコードはうまく機能するようです。ファイル (この場合は test1.txt) に約 1000 行のテキストがある場合、(もちろん) 問題があります。

4

1 に答える 1

2

GnuWinは、Windows への GNU (Unix のような) ツールのポートのコレクションであり、pasteまさにあなたが望むものを含んでいます。ただし、ネイティブの Windows の回答を好むと思います。私はそれを思いつきましたが、きれいではありません。@ walid2mi の巧妙なソリューションから始めて、それを coljoin.bat にストライプ化します。

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

次の 4 つのファイルを結合できます。

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

必要な時間はファイルの長さに比例して増加し、ソリューションの大幅な速度低下を回避する必要があります。ただし、すべてのファイルの行数が同じでない場合、このソリューションの失敗モードは適切ではありません。ユーザーは通常、不足している行を入力するように求められます。

于 2012-12-21T17:56:48.313 に答える