【问题标题】:Merging CSV File Data Batch Script合并 CSV 文件数据批处理脚本
【发布时间】:2014-12-02 21:45:21
【问题描述】:

如果可能,我想用批处理脚本合并两个 CSV 文件的数据。

问题在于,尽管它们包含相似的数据,但它们不按顺序排列,需要合并/合并。我想要这个文件的最后一列

Isher,Dhupar,7,7M5,7ae/Ma1   Mr K F TREASURE
Saarah,Hassan,7,7M5,7ae/Ma1   Mr K F TREASURE
Zenzele,Kabara-Clarke,7,7M5,7ae/Ma1   Mr K F TREASURE

被添加到该文件的下一行,它是合适的人。

Abed,Abbas,P,J3XXXXXXXXXXX,7,NULL,abedabbas,****,A
Muzefa,Abbas,P,A3XXXXXXXXXXX,8,NULL,muzefaabbas,****,A
Taiba,Abbas,P,A3XXXXXXXXXXX,11,NULL,taibaabbas,****,A

即它将进行以下转换:

Abed,Abbas,P,J3XXXXXXXXXXX,7,NULL,abedabbas,****,A,7ae/Ma1   Mr K F TREASURE
Muzefa,Abbas,P,A3XXXXXXXXXXX,8,NULL,muzefaabbas,****,A,8fj/Ma1   Mrs C H CLARK
Taiba,Abbas,P,A3XXXXXXXXXXX,11,NULL,taibaabbas,****,A,11ae/Ma1   Mr K F TREASURE

我已经设法构建了一个批处理文件,它读取第二个 CSV 文件中的前两个字段并存储到一个数组中,但仅此而已:

@echo off
setlocal enableextensions enabledelayedexpansion
set n=0

for /f "tokens=1,2 delims=," %%a in (Database.csv) do (
    set names[!n!]=%%a,%%b
    set /a n+=1
)
set /a n-=1

for /l %%f in (0,1,%n%) do (
    echo !names[%%f]!
)

endlocal

提前致谢!

【问题讨论】:

    标签: batch-file csv scripting command-prompt


    【解决方案1】:

    哇!您应该意识到示例数据通常用于澄清问题,因此读者可以轻松地按照问题描述查看示例。但是,在这种情况下,您的示例只是分散我们的注意力,因为没有一个“合适的人”匹配数据的案例!无论如何,这是一个解决方案(当我猜正确的数据应该如何):

    @echo off
    setlocal EnableDelayedExpansion
    
    rem Load the field 5 from file1.txt in an array that uses the first two fields as index
    for /F "tokens=1,2,5 delims=," %%a in (file1.txt) do set "field5[%%a,%%b]=%%c"
    
    rem Process the file2.txt and insert the field5 of the matching data
    for /F "tokens=1,2* delims=," %%a in (file2.txt) do echo %%a,%%b,%%c,!field5[%%a,%%b]!
    

    这样,如果这是第一个文件:

    Abed,Abbas,7,7M5,7ae/Ma1   Mr K F TREASURE
    Muzefa,Abbas,7,7M5,8fj/Ma1   Mrs C H CLARK
    Taiba,Abbas,7,7M5,11ae/Ma1   Mr K F TREASURE
    

    那么这是输出:

    Abed,Abbas,P,J3XXXXXXXXXXX,7,NULL,abedabbas,****,A,7ae/Ma1   Mr K F TREASURE
    Muzefa,Abbas,P,A3XXXXXXXXXXX,8,NULL,muzefaabbas,****,A,8fj/Ma1   Mrs C H CLARK
    Taiba,Abbas,P,A3XXXXXXXXXXX,11,NULL,taibaabbas,****,A,11ae/Ma1   Mr K F TREASURE
    

    【讨论】:

      【解决方案2】:

      让我重新表述一下我的解决方案:

      • 将以下文件中的所有名称存储在一个数组中:

        Abed,Abbas,P,J3XXXXXXXXXXX,7,NULL,abedabbas,****,A Muzefa,Abbas,P,A3XXXXXXXXXXXX,8,NULL,muzefaabbas,****,A Taiba,Abbas,P,A3XXXXXXXXXXXX,11,NULL,taibaabbas,****,A

      • 使用下面文件中数组中的每个名称进行搜索

        Isher,Dhupar,7,7M5,7ae/Ma1 Mr K F TREASURE Saarah,Hassan,7,7M5,7ae/Ma1 Mr K F TREASURE Zenzele,Kabara-Clarke,7,7M5,7ae/Ma1 Mr K F TREASURE

      • 并取最后一列(例如“7ae/Ma1 Mr K F TREASURE”)并以适当的名称将其添加到第一个文件中:

        Abed,Abbas,P,J3XXXXXXXXXXX,7,NULL,abedabbas,****,A Muzefa,Abbas,P,A3XXXXXXXXXXXX,8,NULL,muzefaabbas,****,A Taiba,Abbas,P,A3XXXXXXXXXXXX,11,NULL,taibaabbas,****,A

      【讨论】:

        猜你喜欢
        • 2020-05-08
        • 2012-06-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-31
        • 2015-05-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多