Delphi 7: как разбить строку на TStringList - PullRequest
1 голос
/ 08 июня 2010

Это Delphi семь и я разделить строку на строки.

В частности, у меня 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 автоматически, поэтому все, что мне нужно было сделать, это присвоить строку свойству Text в списке TStringlist (это также убрало одинарные кавычки вокруг каждого #$D#$A). Поэтому мне нужно было добавить только одну строку кода.

Если ограничитель не был преобразован Delphi, то я думаю, что @Roald van Doorn Решение сработало бы, поэтому он получает награду.

Ответы [ 2 ]

5 голосов
/ 08 июня 2010

Преобразовать строку в список строк легко, все, что вам нужно сделать, это выполнить следующие шаги.

  • Полоса ведущая '

  • Заменить все '#$D#$A' на # 13 # 10 (тем самым разбив строку на строки снова.

  • Удалить трейлинг '#$D#$A

Назначьте результирующую строку свойству StringList.Text, каждая строка в списке строк теперь является строкой файла DFM.

2 голосов
/ 08 июня 2010

Давайте попробуем этот код: http://www.delphi3000.com/articles/article_4028.asp

Другое дело: я вижу, что вы используете объект TScriptForm. Хорошо, что вы даете этому объекту функции сериализации / десериализации.

например, прочитайте этот метакод: tscriptform: myform; the_stream: tstream;

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

на практике: создайте поток tstream, который управляет сериализацией вашей формы и использует ее для инкапсуляции сохранения / загрузки логики объектов формы.

...