【问题标题】:Combining multiple .csv files into one .csv file line wise using a batch file使用批处理文件将多个 .csv 文件逐行组合成一个 .csv 文件
【发布时间】:2012-12-08 17:48:58
【问题描述】:

我有一种情况,我需要将四个 CSV 文件合并为一个 CSV 文件。如果我只想一个接一个地添加它们,这很容易,但我需要让它们在 CSV 文件中并排放置。我知道所有四个文件都有相同数量的条目(在 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
)

注意:我知道我粘贴的代码使用的是 .txt 文件而不是 .csv 文件。我认为对一个人有用的东西对另一个人有用。

同样,只要文件很小,上面的代码似乎就可以很好地工作。当文件(在本例中为 test1.txt)有大约 1000 行文本时,我(当然)遇到了麻烦。

【问题讨论】:

  • 文件有标题吗?如果没有,你可以简单地使用复制命令来组合它们。
  • @a_horse_with_no_name:那会“联合所有”。但他们想要一种“加入 rownum”。

标签: if-statement for-loop batch-file


【解决方案1】:

GnuWin 是 GNU(类 Unix)工具移植到 Windows 的集合,其中包含 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

所需时间应随文件长度线性增加,避免您的解决方案急剧变慢。但是,当所有文件的行数不相等时,此解决方案的故障模式并不好。通常会提示用户输入缺失的行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-05
    • 1970-01-01
    • 2022-11-04
    • 2019-10-11
    • 1970-01-01
    • 1970-01-01
    • 2014-05-17
    • 2020-02-23
    相关资源
    最近更新 更多