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
'델파이' 카테고리의 다른 글
TDateTimePicker 의 이벤트 사용 (0) | 2014.08.14 |
---|---|
숫자함수( Int, Trunc, Round, SimpleRoundTo) (0) | 2014.07.07 |
로컬파일 날짜 구하기( OS timestamp형식, 날짜형식) (0) | 2014.05.21 |
regsvr32 레지스트리 등록 64비트에서 (0) | 2014.04.09 |
InstallShield에서 설치파일 하위버전 덮어쓰기 설정 (0) | 2014.01.21 |