有什么方法可以让 TStringList.CommaText 不使用引号转义逗号?

Mas*_*ler 3 delphi code-generation escaping tstringlist

我正在做一些代码生成工作,我需要做的一件事是创建一个函数调用,其中一个参数是函数调用,如下所示:

result := Func1(x, y, Func2(a, b, c));
Run Code Online (Sandbox Code Playgroud)

TStringList.CommaText 对于生成参数列表非常有用,但是当我遍历树以构建外部函数调用时,我最终得到的结果如下:

result := Func1(x, y, "Func2(a, b, c)");
Run Code Online (Sandbox Code Playgroud)

它引用了第三个参数,因为它包含逗号,并且产生了无效代码。但是我不能做一些像 StringReplace 所有双引号为空字符串这样简单的事情,因为函数参数很可能是一个带有双引号的字符串。有没有办法让它不转义包含逗号的行?

Rob*_*edy 7

你可以设置QuoteChar为一个空格,你只会在输出中得到一些额外的空格,这通常是可以的,因为通常不希望生成的代码看起来很漂亮。不过,字符串文字会受到影响;他们会插入额外的空格,从而改变字符串的值。

Free Pascal 的TStrings用于StrictDelimiter控制读取DelimitedText属性时是否发生引用。如果为true,则根本不会发生引用。也许 Delphi 以同样的方式对待该属性。