2010-06-08 50 views
1

它是德尔福和我将一个字符串拆分成行。德尔福7:如何将一个字符串拆分成一个TStringList

具体来说,我有一个DFM作为字符串(从MySql数据库中提取),我想将它分割成TStringList中的行。

它看起来是这样的......

'Oject Form1: TScriptForm'#$D#$A' Left = 0'#$D#$A' Top = 0'#$D#$A' Align = alClient'#$D#$A' BorderStyle = bsNone'#$D#$A' ClientHeight = 517'#$D#$A' ClientWidth = 993'#$D#$A' Color = clBtnFace'#$D#$A' Font.Charset = DEFAULT_CHARSET'#$D#$A' Font.Color = clWindowText'#$D#$A' Font.Height = -11'#$D#$A' Font.Name = 'MS Sans Serif''#$D#$A' Font.Style = []'#$D#$A' OldCreateOrder = False'#$D#$A' SaveProps.Strings = ('#$D#$A' 'Visible=False')'#$D#$A' PixelsPerInch = 96'#$D#$A' TextHeight = 13'#$D#$A' 


豆:这竟然是非常适合我非问题。 Delphi自动将#$D#$A视为CR LF,所以我只需将字符串分配给TStringlist的Text属性(这也剥去了每个#$D#$A附近的单引号)。所以,我只需添加一行代码即可。

如果限制器没有被德尔福转换,那么我认为@Roald van Doorn 解决方案可以工作,所以他得到了答案。

+1

这种技术有一些问题。 – 2010-06-14 17:41:19

回答

5

将字符串转换为字符串列表很容易,您只需执行以下步骤即可。

  • 地带的领先'

  • 替换所有'#$D#$A'与#13#10(从而分割字符串中线一次。

  • 卸下后'#$D#$A

将结果字符串分配给StringList.Text属性,字符串中的每一行列表现在是DFM文件的一行。

+3

此外,''(两个单引号)应替换为'(一个单引号)。 – 2010-06-08 09:53:47

+0

+1当然,忘了那个。 – 2010-06-08 10:53:05

2

让我们试试这个代码: http://www.delphi3000.com/articles/article_4028.asp

另一件事:我看到你正在使用TScriptForm对象。你给这个对象的序列化/反序列化特性是件好事。

例如,阅读这个元编码: tscriptform:myform; the_stream:tstream;

myform:= tscriptform.create; (...) myform.unserialize(the_stream);

实践中:创建一个tstream下降并管理表单的序列化,并使用它来封装表单对象的保存/加载逻辑。