1

假设我有 2 个文本文件:

一个.txt:

Param1: Value1
Param2: Value2
      .
      .
      .
      .
ParamM: ValueM

B.txt

Param1: Value1
Param2: Value2
      .
      .
      .
      .
ParamN: ValueN
  • A.txt中的参数个数,即M可以大于、小于或等于B.txt中的参数个数,即N
  • A.txtB.txt中相同参数的值不必相同。
  • MN大概可以达到最大值200。
  • 参数名称是任意的。他们没有数字。以上只是为了说明。

我的目标是合并A.txtB.txt。如果发生任何冲突,我有一个文件/内存存储,它指示哪个优先。

例如,

A.txt可能如下所示:

Path: C:\Program\Files
Data: ImportantInfo.dat
Version: 1.2.3
Useless: UselessParameter.txt

B.txt可能如下所示:

Path: C:\ProgramFiles
Data: NotSoImportant.dat
Version: 1.0.0
Useful: UsefulParameter.txt

最终的文本文件应如下所示:

Path: C:\ProgramFiles
Data: ImportantInfo.dat
Version: 1.2.3
Useful: UsefulParameter.txt

现在我思考这个问题的方法是:

get a line from A.txt
get a line from B.txt
tokenize both by ":"
compare param names
if same
    write A.txt's value to Result.txt
else if different
    write A.txt's line into Result.txt
    write B.txt's line into Result.txt  /* Order doesn't really matter */
repeat above steps until end of both text files

当A.txt有某个参数而B.txt没有时,这种方法不会处理。如果存在一些轻量级库/API 来执行此操作,那将非常有帮助。我不是在寻找命令行工具(由于system()调用的开销)。

谢谢!

4

1 回答 1

2

在具有 Map 数据类型的语言中,这会容易得多。我会这样做:

  1. 读取所有 B 并将键值字符串存储在内存中

  2. 读取 A 并为每个键覆盖值(如果存在)或添加它(如果不存在)

  3. 将键值输出到文件

于 2013-02-19T09:05:40.900 回答