views:

456

answers:

2

It's Delphi seven and I to split a string into lines.

Specifically, I have a DFM as a string (pulled from a MySql database) and I want to split it into lines in a TStringList.

It looks something like this ...

'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'

eh


Anser: this turned out to be pretty much a non-question for me. Delphi sees the #$D#$A as CR LF automatically, so that all I had to do was assign the string to the Text property of a TStringlist (this also stripped the single quotes from around each #$D#$A). So, I only had to add a single line of code.

If the limiter had not been converted by Delphi then I think that @Roald van Doorn solution would have worked, so he gets awarded the answer.

+3  A: 

It's easy to convert a string to a stringlist, all you need to do is the following steps.

  • Strip the leading '

  • Replace all '#$D#$A' with #13#10 (thereby splitting the string in to lines again.

  • Remove the trailing '#$D#$A

Assign the resulting string to the StringList.Text property, each line in the stringlist is now a line of the DFM file.

Roald van Doorn
Also, '' (two single quotes) should be replaced by ' (one single quote).
TOndrej
+1 Of course, forgot that one.
Roald van Doorn
+1  A: 

Let's try this code: http://www.delphi3000.com/articles/article_4028.asp

Another thing: i see that you are using TScriptForm object. It is good thing that you give to this object serialization/unserialization features.

for example, read this metacode: tscriptform :myform; the_stream : tstream;

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

in practice: make a tstream descendand that manage serialization of your form, and uses it to encapsule saving/loading logics of your form objects.