在pas文件中格式化字符串

时间:2011-05-01 01:02:09

标签: string delphi string-concatenation

在跨越多行时,是否有一种很好的方法可以将字符串赋值给变量?

这样做的原因是我有一些大的SQL语句(我想在pas中)但是这样很烦人

var
  sql : string;
begin
  sql := 'SELECT * ' +
         'FROM foo ' +
         'WHERE `this`=0';

复制并粘贴到终端/其他程序中很烦人,因为我必须删除'和'+等。

有没有办法像... ...

var
  sql : string;
begin
  sql := ""SELECT *
         FROM foo
         WHERE `this`=0"";

所以有一些方法可以用新行分配一个文本/字符串块而不必连接它。

6 个答案:

答案 0 :(得分:4)

由于无法在SQL中以这种方式表示字符串,我通常使用Delphi IDE中的RegEx搜索和替换来以所需方式格式化字符串。

  SELECT *
  FROM foo
  WHERE `this`=0

Regular expression replace dialog

这将使用引号括起来的行替换任何行,然后是+ sLineBreak +

  sql :=
      '  SELECT *' + sLineBreak +
      '  FROM foo' + sLineBreak +
      '  WHERE `this`=0' + sLineBreak +

然后我只是整理了最后一行:

  sql :=
      '  SELECT *' + sLineBreak +
      '  FROM foo' + sLineBreak +
      '  WHERE `this`=0';

当然,对于任何前置或尾随文本,例如qry.SQL.Add('\0');

,也可以这样做

答案 1 :(得分:3)

你的问题是:

  

Delphi字符串文字是否可以跨越多行?

答案是否定的。

答案 2 :(得分:1)

不是我所知道的(至少没有开箱即用)。无论如何,你可能想看看这个:

How to assign a multiline string value without quoting each line?

答案 3 :(得分:1)

您可以将SQL保存在具有TStrings属性(如TSQLQuery)的组件中,但我对更长/复杂语句的解决方案是将“示例”副本保留为源代码注释,其具有实际参数以使测试更容易,并保持两个版本同步。

答案 4 :(得分:1)

如果您喜欢C#的方式(就像我一样),那么不要忘记投票支持此质量控制报告

http://qc.embarcadero.com/wc/qcmain.aspx?d=2012

它建议让你的例子看起来像这样:

var
  sql : string;
begin
  sql := @'SELECT *
         FROM foo
         WHERE `this`=0';

答案 5 :(得分:1)

如果在Delphi中安装GExperts,则在按下>输入<后,IDE将自动插入'+。如果你在一个字符串中并且尚未关闭它。

下载链接:http://www.gexperts.org/download.html