为了文档和进一步检查,我想在许多项目中对所有DFM文件运行“提取字符串”以找到所有的SQL语句。是否有命令行工具可以做到这一点?所有的DFM文件都是文本格式。
为了文档和进一步检查,我想在许多项目中对所有DFM文件运行“提取字符串”以找到所有的SQL语句。是否有命令行工具可以做到这一点?所有的DFM文件都是文本格式。
SQL.Strings=( 'select * from mytable' )或者也可能是(我手边没有Delphi来检查,这就是在家的乐趣!)
SQL.Text=( 'select * from mytable' )考虑到这些字符串可能会在DFM中跨越几个“行”,并且可能有几个变化需要进行检查,个人建议编写一个小的Delphi程序来完成此操作。
CommandText=( 'exec mysproc :id, :value' )等等。
SQL.Strings = (
这一部分,然后读取剩余的行和所有后续行,去除每行开头和结尾的'
,直到到达以')'
结尾的行 - 在这一点上,我就完成了。实际上,在每行引号中包含的SQL(和注释)并不重要。您想要阅读每个感兴趣的行,并剪切出每行第一个和最后一个引号之间的文本。这必须有效,因为我无法看到Delphi以其他方式处理此数据流,它不可能“读取”字符串内容 - 它仅基于以下原则工作:字符串列表(可能)已被分成几行,DFM中每行都用一个开放和关闭的'
进行定界,并且整个字符串列表的内容都包含在一对括号中。/* :-) */
会破坏计数,注释也需要正确处理。而且SQL注释语法并不标准化。也许将Delphi的流式代码复制到读取DFM中会更容易? - mjn由于 DFM 基本上是以 名称=值 的格式存在,因此您可以将其加载到 tStringlist 中,然后循环遍历每一行,查找您感兴趣的特定属性名称:
var
slDfm : tStringList;
Item : String;
ix : integer;
begin
slDFM := tStringlist.create;
try
slDFM.LoadFromFile( filename );
for ix := 0 to slDfm.Count-1 do
begin
slDfm.Strings[ix] := Trim(slDfm.Strings[ix]);
if SameText(Trim(slDfm.Names[ix]),'CommandText') then
memo1.Lines.Add('"'+Trim(slDfm.ValueFromIndex[ix])+'"');
end;
finally
slDFM.free;
end;
end;