gpt4 book ai didi

batch-file - 将两个 csv 文件每行与输出进行比较(如果添加、删除或更新)

转载 作者:行者123 更新时间:2023-12-02 16:21:04 33 4
gpt4 key购买 nike

我有两个包含 5 个字段的 csv 文件,其中分隔符是逗号。我需要比较这些文件并获取一个输出文件,其中包含添加、更新或删除的行的信息。

我发现了几个批处理脚本,它们使用 fc 或 comp 函数进行比较,但仅给出文件之间的差异。我没有找到相关主题可以给出有关添加、更新或删除行的结果。

有人可以帮我解决这个问题吗?

最佳答案

这个话题很有趣!也许您和我一样,发现 FC 命令的输出格式令人困惑和烦人,尽管它确实提供了所需的信息。下面的批处理程序获取 FC 命令的输出并以允许识别是否在原始文件的两行之间添加了新的信息 block ,或者是否已从原始文件中删除了行 block 的方式重新排列它,或任何其他文件修改情况(已更新)。最困难的部分是选择以一种愉快的方式显示信息的格式,但我认为我的解决方案非常好!

@echo off
rem FCOMP.BAT: Format FC output in a pleasant way
rem Antonio Perez Ayala
if "%~2" neq "" goto start
echo Format FC output identifying added, deleted or updated sections
echo/
echo FCOMP filename1 filename2 [/switches /for /FC /command]
goto :EOF

:start
setlocal EnableDelayedExpansion
set while=if not
set do=goto endwhile
set endwhile=goto while
set "space= "
set "spaces39= "
fc %3 %4 %5 %6 %7 %8 %9 %1 %2 > differences.txt
if %errorlevel% equ 1 call :FormatFC < differences.txt
del differences.txt
goto :EOF

:FormatFC
set /P line=
set /P line=
rem Process each set of differences
:while
%while% defined line %do%
rem Load old and new sections of this set
set line=
set /P line=
set old=0
:while1
%while% "!line:~0,5!" neq "*****" %do%1
set /A old+=1
set oldLine[%old%]=!line!%spaces39%
set line=
set /P line=
%endwhile%1
:endwhile1
set line=
set /P line=
set new=0
:while2
%while% "!line:~0,5!" neq "*****" %do%2
set /A new+=1
set newLine[%new%]=!line!%space%
set line=
set /P line=
%endwhile%2
:endwhile2
rem Identify the type of this set
if %old% equ 2 (
echo ====== NEW SECTION ADDED ====================================================
echo/
echo(!oldLine[1]:~0,79!
set /A new-=1
for /L %%i in (2,1,!new!) do echo( ^|!newLine[%%i]:~0,70!
echo(!oldLine[2]:~0,79!
) else if %new% equ 2 (
echo OLD SECTION DELETED ==========================================================
echo/
echo(---------!newLine[1]:~0,70!
set /A old-=1
for /L %%i in (2,1,!old!) do echo -!oldLine[%%i]:~0,78!
echo(---------!newLine[2]:~0,70!
) else ( rem both %old% and %new% gtr 2
echo ============================== SECTION UPDATED ==============================
echo/
if %old% lss %new% (
for /L %%i in (1,1,%old%) do echo(!oldLine[%%i]:~0,39!^|!newLine[%%i]:~0,39!
set /A old+=1
for /L %%i in (!old!,1,%new%) do echo(%spaces39%^|!newLine[%%i]:~0,39!
) else (
for /L %%i in (1,1,%new%) do echo(!oldLine[%%i]:~0,39!^|!newLine[%%i]:~0,39!
set /A new+=1
for /L %%i in (!new!,1,%old%) do echo(!oldLine[%%i]:~0,39!
)
)
rem Pass to next set of differences
echo/
set /P line=
set line=
set /P line=
%endwhile%
:endwhile
exit /B

安东尼奥

关于batch-file - 将两个 csv 文件每行与输出进行比较(如果添加、删除或更新),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13292360/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com