【问题标题】:How to replace a data in a file with another data from another file?如何用另一个文件中的另一个数据替换文件中的数据?
【发布时间】:2015-06-12 08:48:41
【问题描述】:

我正在尝试打开此文件 (final.txt) 并阅读内容:

c0001 f260 大号 D11 H30 R0000 C0040 1X1100000100010B300300003003 181100202900027零件编号 181100202900097[PRTNUM] 1e5504002400030B 1X1100002300010L300003 191100202000030数量 191100202000080[数量] 1e5504001500040B 1X1100001400010L300003 1X1100001400150L003090 191100202000170P.O.No 191100202000220[PONUMB] 1e5504001500180B 191100201200030供应商 1e3304000700030B 1X1100000600010L300003 181100200300030系列 181100200300090[序列号] 171100300900190Rev 171100300300190[REV] 171100300900240个 171100300300240[单位] 1X1100000100180L003130 Q0001 乙

我正在阅读的只是[PRTNUM][QUANTY][PONUMB][SERIAL][UNITS]

我编写了以下 C 程序:

char* cStart = strchr(cString, '[');

if (cStart)
{
    // open bracket found
    *cStart++ = '\0'; // split the string at [
    char* cEnd = strchr(cStart, ']');
    // you could check here for the close bracket being found
    // and throw an exception if not
    *cEnd = '\0'; // terminate the keyword
    printf("Key: %s, Value: %s",cString, cStart);
}
// continue the loop

但现在我想用第二个文件中的数据替换这些占位符:

132424235 004342 L1000 DZ12 234235 234235

我想用132424235 替换[PRTNUM](来自第一个文件)等等......最后我的文件应该用所有这些数据更新。你能告诉我在上面的程序中我应该使用什么函数吗?

【问题讨论】:

    标签: c string pointers file-io replace


    【解决方案1】:

    如果您不介意另一种方法,这里有一个算法可以优雅地完成这项工作

    1. 创建一个(足够大的)临时缓冲区。另外,创建(打开)一个输出文件,该文件将是修改后的版本。
    2. 使用fgets()将输入文件中的一行读入缓冲区
    3. 使用strstr() 搜索特定的“关键字”
    4. 如果找到匹配项--

      4.1。打开另一个输入文件。

      4.2。读取对应的数据(行),使用fgets()

      4.3。用新读取的值替换临时缓冲区中的实际数据。

      4.4。将修改后的数据写入输出文件。

    5. 如果未找到匹配项,则将原始数据写入输出文件。然后,转到第 2 步。

    6. 继续直到fgets()返回NULL(表示文件内容已用完)。

    最后,输出文件将使用从第二个文件读取的值替换第一个文件中的数据,并将那些特定的“占位符”替换为从第二个文件中读取的值。

    显然,您需要稍微改进算法以使其适用于多个“占位符”字符串。

    【讨论】:

      【解决方案2】:

      保留一个足够大的额外字符串(将其命名为副本)以容纳文件 1 + 一些额外的以管理将 [PRTNUM] 替换为 132424235

      开始读取具有 file1 的第一个字符串,并在遇到 [PRTNUM] 时立即继续复制到第二个字符串(副本),在字符串 2 中,而不是复制 [PRTNUM] 您将其附加到 132424235 等所有其他字符串.

      最后用第二个(复制)字符串替换 file1.txt。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-06-20
        • 1970-01-01
        • 2017-05-18
        • 2019-03-06
        • 2016-07-12
        • 1970-01-01
        • 1970-01-01
        • 2018-03-29
        相关资源
        最近更新 更多