1

当需要位替换的文档是不变的(一种邮件合并场景)时,我希望能提供一些关于最快替换方法的指示。

当然,有很多方法可以使用 string.replace 和 regexp 进行替换,但看起来他们每次查找匹配项时都需要解析输入文档。这就是我要优化的一点。

4

3 回答 3

2

我会说您最好的选择可能是将文档拆分为一个数组,其中每个元素都是上一个替换和下一个替换之间的文本。然后,您只需使用字符串连接将拆分数组的内容与每个替换标记交错,而不是替换。

一些伪代码:

doc_array = split(input_doc, "token marker")

for each replace_array in set_of_replace_arrays:
    this_doc = ""

    while elements remain in doc array:
        this_doc.concat(next doc element)

        if any elements remain in replace array:
            this_doc.concat(next replace element)

    output this_doc
于 2009-10-26T12:02:34.743 回答
0

好吧,由于您不想解析并且您的输入文档是恒定的,您可以使用 aMemoryStream来处理您的原始文档并通过使用它们的绝对位置来更改您的位。

另一种方法是使用该String.Format标记作为占位符:

string input = "Dear {0} {1}";
//...
return String.Format(input, "Mr.", "Farias");
于 2009-10-26T12:06:44.517 回答
0

为了提高灵活性,您可以使用XslCompiledTransform并让它输出文本。它针对快速 XML 和文本生成进行了优化,如果需要,您也可以包含一些逻辑。

于 2009-10-26T12:09:04.183 回答