ExtractStrings 함수는 참 편하긴한데 따옴표들과 엮이면 골치 아프다.
예를 들어 쌍따옴표를 만나면 다음 쌍따옴표가 나올 때까지 자르지를 않는다던가...(정확한지는 모르겠다)
여하튼 고생하다가 그냥 치환해버리는 방법을 사용했다.
아래처럼.
procedure TForm1.Button1Click(Sender: TObject);
var
스트링: String;
sList: TStringList;
i: Integer;
begin
sList:=TStringList.Create;
try
// '스트링'에 막 따옴표가 뒤죽박죽된 문자열이 들어있다고 가정하고...
// 치환
스트링:=StringReplace(스트링, '''', Chr(4), [rfReplaceAll]);
스트링:=StringReplace(스트링, '"', Chr(5), [rfReplaceAll]);
// Extract
ExtractStrings(['$'], [], PWideChar(스트링), sList);
for i:=0 to sList.Count-1 do begin
// 재치환
sList[i]:=StringReplace(sList[i], Chr(4), '''', [rfReplaceAll]);
sList[i]:=StringReplace(sList[i], Chr(5), '"', [rfReplaceAll]);
Memo1.Lines.Add(IntToStr(i)+' :: '+sList[i]);
end;
finally
FreeAndNil(sList);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
스트링: String;
sList: TStringList;
i: Integer;
begin
sList:=TStringList.Create;
try
// '스트링'에 막 따옴표가 뒤죽박죽된 문자열이 들어있다고 가정하고...
// 치환
스트링:=StringReplace(스트링, '''', Chr(4), [rfReplaceAll]);
스트링:=StringReplace(스트링, '"', Chr(5), [rfReplaceAll]);
// Extract
ExtractStrings(['$'], [], PWideChar(스트링), sList);
for i:=0 to sList.Count-1 do begin
// 재치환
sList[i]:=StringReplace(sList[i], Chr(4), '''', [rfReplaceAll]);
sList[i]:=StringReplace(sList[i], Chr(5), '"', [rfReplaceAll]);
Memo1.Lines.Add(IntToStr(i)+' :: '+sList[i]);
end;
finally
FreeAndNil(sList);
end;
end;
'Delphi' 카테고리의 다른 글
[Delphi] THashStringList (대용량 문자열 저장/검색) (0) | 2009.04.18 |
---|---|
예외 (Exception) 모음 (0) | 2009.04.18 |
ReportMemoryLeaksOnShutdown:=True 사용시 Indy의 어쩔 수 없는 메모리 누수 출력안하기 (0) | 2009.04.18 |
[Delphi] TStrings.Objects 사용 (0) | 2009.04.18 |
TMemo, TRichEdit 의 가로 길이 (0) | 2009.04.16 |