2010-06-08 59 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下降並管理表單的序列化,並使用它來封裝表單對象的保存/加載邏輯。