본문 바로가기
Delphi Tip/유닛

TStringList 의 StrictDelimiter 프로퍼티

by MonoSoft 2022. 1. 4.
728x90
반응형

delphi delimiter space TStringList 의 StrictDelimiter 프로퍼티

 

RAD2007이상버젼에서는

TStringList 에 StrictDelimiter라는 bool형 프로퍼티가 있습니다.

 

아는 사람은 알겠지만..

새로 생긴 프로퍼티라서 혹 모르시는 분이 있으실것 같아 적어봅니다.

 

구분자(Delimiter)를 엄격하게(Strict)

 

다음과 같은 문자열이 있을경우에 StrictDelimiter를 쓰고 안쓰고 결과가 다릅니다.


TStringList *lst=new TStringList;

lst->Delimiter='$';

lst->DelimitedText="1111$2  22$3333$4444";

//위와같이 할경우 다음과 같이 결과가 나옵니다.

 

lst->Strings[0]; // "1111";

lst->Strings[1]; // "2";

lst->Strings[2]; // "22";

lst->Strings[3]; // "3333";

lst->Strings[4]; // "4444";

 

그냥 Delimiter로 '$'를 주었지만 공백(space)문자도

Default로 Delimiter로 쓰여지기 때문입니다.

 

그런데 똑같은 문자열에서 StrictDelimiter=true로 해서 짜르면..

 

TStringList *lst=new TStringList;

lst->StrictDelimiter=true;

lst->Delimiter='$';

lst->DelimitedText="1111$2  22$3333$4444";

 

//위와같이 할경우 다음과 같이 결과가 나옵니다.

lst->Strings[0]; // "1111";

lst->Strings[1]; // "2  22";

lst->Strings[2]; // "3333";

lst->Strings[3]; // "4444";

 

StrictDelimiter는 DelimitedText에만 영향을 끼치는것이 아니라

CommaText에도 영향을 미칩니다.

 

CommaText에서도 Default-Delimiter로 space(' ')와 comma(',')등이  같이 쓰이는데..

StrictDelimiter를 true사용하면 space는 Delimiter에서 제외되는것입니다.

 

TStringList *lst=new TStringList;

lst->StrictDelimiter=false;

lst->CommaText=="1111,2 22,\"33  333\",4444";

//--------------------

//StrictDelimiter=false;로하면 다음과 같이 되구

lst->Strings[0]; // "1111";

lst->Strings[1]; // "2";

lst->Strings[2]; // "22";

lst->Strings[3]; // "33 333";

lst->Strings[4]; // "4444";

delete lst;

 

그리구..

 

TStringList *lst=new TStringList;

lst->StrictDelimiter=true;

lst->CommaText=="1111,2 22,\"33  333\",4444";

//--------------------

//StrictDelimiter=true;로하면 다음과 같이 됩니다.

lst->Strings[0]; // "1111";

lst->Strings[1]; // "2 22";

lst->Strings[2]; // "33 333";

lst->Strings[3]; // "4444";

delete lst;

 

-------------------------------------------------------------------------------------

앗참 한가지더..

 

StrictDelimiter프로퍼니는

CommaText나 DelimitedText프로퍼티의 Set에만 동작하는것이 아니라

Get에도 동작합니다.

 

StrictDelimiter=true; 로해서 DelimitedText를 만들어 보면 다음과 같습니다.

 

TStringList *lst=new TStringList;

lst->StrictDelimiter=true;

lst->Delimiter='$';

lst->Add("1111");

lst->Add("2222");

lst->Add("33 33");

lst->Add("4444");

ShowMessage(lst->DelimitedText); //내용은 "1111$2222$33 33$4444"

delete lst;

 

위 코드에서 StrictDelimiter=false로 해서 쓰면 어떻게 될까요?

 

TStringList *lst=new TStringList;

lst->StrictDelimiter=false;

lst->Delimiter='$';

lst->Add("1111");

lst->Add("2222");

lst->Add("33 33");

lst->Add("4444");

ShowMessage(lst->DelimitedText); //내용은 "1111$2222$\"33 33\"$4444"

delete lst;

 

리스트에 Add한 문자열중

공백 space(' ') 이 있는 문자열은 쌍따옴표('"')로 묶여지게 됩니다.

CommaText에도 똑같이 동작하구요..

 

728x90
반응형

'Delphi Tip > 유닛' 카테고리의 다른 글

메인폼과 Application 전역객체  (0) 2024.04.07
루프 시간측정 성능테스트  (0) 2022.01.05
TStringList 삶아서 구워먹기  (1) 2021.12.31
프로그램 중복 실행 방지  (0) 2021.12.30
DateUtils.pas 날짜 연산 정리  (0) 2021.12.29

댓글