C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[989] [String] TStringList 의 StrictDelimiter 프로퍼티란?
장성호 [nasilso] 17982 읽음    2010-06-09 18:05
음..

C++Builder6, Delphi7에는 없지만..

RAD2007이상버젼에서는
TStringListStrictDelimiter라는 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에도 똑같이 동작하구요..

그럼..
크레브 [kkol]   2010-06-17 22:45 X
공백문자가 기본 Delimeter로 되어 있어서 불편한 점이 종종 있었는데 좋은 프로퍼티가 추가되었군요 ^^.

+ -

관련 글 리스트
989 [String] TStringList 의 StrictDelimiter 프로퍼티란? 장성호 17982 2010/06/09
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.