合并两个Unicode文本文件的非空行,使用Windows批处理。

3

我们有2个Unicode文件。其中一个文件包含另一个文件中缺失的行,如下所示:

1. 
2. bbbbbbbbbbbbbbbbb
3. 
4. ddddddddddddddddddddd
5. eeeeeeeeeeeeeeeeeeeeeeee


1. aaaaaaaaaaaaaa
2. 
3. ccccccccccccccccc
4.
5.

我们希望将它们合并到第三个文件中,该文件将包含所有行:

1. aaaaaaaaaaaaaa
2. bbbbbbbbbbbbbbbbb
3. ccccccccccccccccc
4. ddddddddddddddddddddd
5. eeeeeeeeeeeeeeeeeeeeeeee

注意:
a,b,c,d,e - 可以是任何文本。
行号仅用于示意目的,实际文件中没有行号。

我创建了这个带有“batch-file”标签的问题,但我对如何实现这个目标持开放态度。当然最好不要涉及类似C++的东西。


合并的标准是什么?是按字典顺序还是实际文件将在适当位置包含空行,就像您的示例一样?两个文件中可以存在相同的行吗? - Alexander
是的,两个文件包含完全相同的行数,如果其中一个文件中有空白行,则另一个文件中肯定填充了该行。当然,可能两个文件中都有空行,因此最终我们将什么也不会添加,但从未在两个文件中都有2行完整内容。 - user2333940
简单来说,这种算法的工作方式如下: 1)将其中一个文件作为基础文件。 2)对于第二个文件的每一行,检查是否为空白。 3)如果为空白,则跳转到下一行;如果不为空白,则将其添加到基础文件中,然后跳转到下一行。 然而,我更倾向于将输出保存在新文件中,而不是修改源文件之一。 - user2333940
1个回答

1
假设没有行以冒号开头,首先我们将每个文件中的每一行读入两个数组中,包括空行 - 这里有一个特殊的技巧,因为普通的 for 循环会跳过空行。然后,只需将两个数组中具有相同索引的元素连接起来,并输出到 results.txt 中:
setlocal EnableDelayedExpansion

set i=0
for /f "tokens=1* delims=:" %%A in ('type "file1.txt" ^| findstr /n "^"') do (
    set /A i+=1
    set arr1[!i!]=%%B
)

set i=0
for /f "tokens=1* delims=:" %%A in ('type "file2.txt" ^| findstr /n "^"') do (
    set /A i+=1
    set arr2[!i!]=%%B
)

for /L %%i in (1,1,%i%) do echo.!arr1[%%i]!!arr2[%%i]!>> result.txt

它几乎可以工作,但在某些地方,我猜测当两个文件都有空行时,它会写入文本“ECHO is off.”。 我将其标记为答案,因为我可以在第二步中删除“ECHO is off.”,但如果您知道如何修复此问题,请回复。 无论如何感谢您! - user2333940
是的,抱歉。我已经编辑了我的答案——在最后一个echo命令之后加上点。 - Alexander

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接