【问题标题】:Merge non-empty lines of the two unicode text files, using windows batch使用windows批处理合并两个unicode文本文件的非空行
【发布时间】:2013-04-24 14:21:23
【问题描述】:

我们有 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 - 可以是任何文本。
行号仅用于说明目的,它们不存在于实际文件中。

我使用“批处理文件”标签创建了这个问题,但我愿意接受有关如何实现此目的的任何建议。当然最好不要涉及 C++ 之类的东西

【问题讨论】:

  • 合并的标准是什么?是字典顺序,还是实际文件将在适当的位置包含空行,如您的示例中那样?两个文件中可以存在相同的行吗?
  • 是的,两个文件包含的行数完全相同,如果一个文件中为空白,则肯定会在另一个文件中填充。当然,也许两个文件中的某些行都是空的,所以我们最终会什么都不添加,但是两个文件中永远不会有 2 个完整的行。
  • 简单地说,这种算法将起作用:1)以其中一个文件为基础 2)在第二个文件中检查每行是否为空白 3)如果为空白 - 移动到下一行,如果不是 - 将其添加到基本文件,然后移至下一行。但是,我更愿意将输出保存在新文件中,而不是更改其中一个来源

标签: text batch-file replace


【解决方案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 已关闭”。我将此标记为答案,因为我可以删除“ECHO 已关闭”。作为第二步,但如果您知道如何解决此问题,请回复。还是谢谢!
  • 是的,对不起。我已经编辑了我的答案 - 只需在最后一个 echo 命令后添加点即可。
猜你喜欢
  • 1970-01-01
  • 2012-06-22
  • 1970-01-01
  • 2019-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多