델파이

CommaText, StrictDelimiter, ExtractStrings함수

미스터몽키 2014. 6. 2. 18:05

TStringList의 CommaText는 여러줄의 문자열을  대신할 수 있어 무척 편리한 속성이다.

 

그런데 기본적인 구분자는 콤마(,)와 스페이스 이다.

 

'우리,나라,대한 민국'  은

 

우리

나라

대한

민국

 

으로 표현된다.

 

그런데 여러 이유에서  스페이스를 문자열 중간에 넣어야 할 경우가 있다   "대한 민국" 처럼 말이다.

 

이때는 기본 구분자에서 스페이스를 제외해야 하는데

 

이때 사용하는 속성이  StrictDelimiter = True; 이다.

 

ListBox1.Items.StrictDelimiter := True; 일때 구분자는 콤마(,)만 사용되고 스페이스는 문자열의 일부가 된다.

 

예를들어

 

ListBox1.Items.StrictDelimiter := True; 

ListBox1.Items.CommaText := '우리,나라,대한 민국'; 

 

우리

나라

대한 민국

 

으로 표현된다.

 

주의할 것은 문자열 중간 뿐만의 스페이스 뿐만 아니라 시작, 끝부분의 스페이스도 포함되니 주의해야한다.

 

'우리, 나라,대한 민국' 은  ( 나라 앞에 스페이스 있음)

 

우리

 나라

대한 민국

 

(추가) ------------------------------------------------------------------------

  참고 http://bloodguy.tistory.com/99

 

아래 예 처럼 Delimiter 속성을 이용하면 콤마(,)아닌 다른 문자도 구분자로 사용가능하다.

CommaText는 DelimitedText와 비슷하다.

 

sList:=TStringList.Create; 

try 

// StrictDelimiter=False: 공백 등도 delimiter 로 인식 

sList.Delimiter:=','

sList.DelimitedText:=문자열; 

Memo1.Lines.Add('Count (strict=False): '+IntToStr(sList.Count)); 

for i:=0 to sList.Count-1 do Memo1.Lines.Add(sList[i]); 

  

// StrictDelimiter=True: 지정한 문자만 delimiter 로 인식 

sList.Clear; 

sList.Delimiter:=',';    // 세미콜론(;) 이나 콜론(:) 도 구분자로 가능할 듯

sList.StrictDelimiter:=True; 

sList.DelimitedText:=문자열; 

Memo1.Lines.Add('Count (strict=True): '+IntToStr(sList.Count)); 

for i:=0 to sList.Count-1 do Memo1.Lines.Add(sList[i]); 

finally 

if Assigned(sList) then

  FreeAndNil(sList);   

 

end

 

 

 // 참고로 Free 와 FreeAndNil 의 차이는 Free만 하면 인스턴스 변수는 nil이 되지 않지만

FreeAndNil은 Free하고 인스턴스 변수에 Nil값을 할당하여  해당 인스턴스가 Nil 인지(할당되었는지)를

Assigned함수 또는 if stlist1 <> nil then  문으로 판단할 수 있다.

 

(추가)--------------------------------------------------------------------------------------------------------------------

 

ExtractStrings함수 를 이용하면 원하는 문자로 구분자로 사용하고 제외시킬 문자도 포함할 수 있다.

 

function ExtractStrings(Separators, WhiteSpace: TSysCharSet; Content: PChar;
  Strings: TStrings): Integer;

 

첫번째 인자가 구분자

두번째 인자는 무시할 문자(예를 들어 스페이스)

세번째 인자는 null-terminated string , c언어타입, pchar

네번째 인자는 구분한 결과를 할당할 스트링리스트

리턴값은 추가된 strings 갯수

 

예)

tStr := '우리/나라/대한/민국';

ExtractStrings(['/'],[],Pchar(tStr),sList);   // 스트링리스트 sList에 할당된다.



(참고) 델파이 StringList 객체 정리

http://www.zetswing.com/bbs/board.php?bo_table=DELPHI_GRA&wr_id=19