2010-06-08 2 views
1

Delphi 및 문자열을 줄로 분할하는 방법입니다.Delphi 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

이 기술에는 몇 가지 문제점이 있습니다. –

답변

5

문자열을 문자열 목록으로 쉽게 변환 할 수 있으므로 다음 단계를 수행하면됩니다.

  • 지구 선두 '

  • 바꾸기 모든 '#$D#$A' # 13 # 10 (하여 후행 '#$D#$A

를 제거합니다. 다시 라인에 문자열을 분할

  • 와 문자열의 각 행 StringList.Text 속성에 결과 문자열을 할당합니다. list는 이제 DFM 파일의 행입니다.

  • +3

    또한 ''(두 개의 작은 따옴표)는 '(한 개의 작은 따옴표)로 대체해야합니다. –

    +0

    +1 물론, 잊어 버렸습니다. –

    2

    은의이 코드를 봅시다 : 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 하위 항목을 만들고이를 사용하여 양식 객체의 논리 저장 /로드를 캡슐화합니다.

    관련 문제