단순하게 해결하시려면
->공백을 특수 문자로 치환 후
->DelimitedText로 파싱하시고
->특수 문자를 다시 공백으로 치환하세요.
sData := 'ABC|DEF GH|JK';
sData := Replace(sData, ' ', Chr(99), [rfReplaceAll]);
slList.Delimiter := '|';
slList.DelimitedText := sData ;
for i := 0 to slList.Count - 1 do
begin
slList.Strings[i] := Replace(slList.Strings[i], Chr(99), ' ', [rfReplaceAll]);
end;
성낙권 님이 쓰신 글 :
: 도로주소를 디비로 만들려고 하는데 제공하는 데이타가 애매하게 되어 있군요..
:
: 정부에서 제공하는 텍스트 데이타가 아래와 같이 되어 있습니다.
:
: 4311110100|충청북도|청주시 상당구|영동||0|87|4|431113236004|교서로|0|1|0|||4311110100100870004047440|01|4311152500|중앙동|28546||||||알리안츠생명빌딩|0|28546|0||
:
: 특징은 '청주시 상당구'처럼 한필드에 공백이 있고, 영동 다음의 데이타는 없기 때문에 구분자가 연속으로 나옵니다. 즉 || 이렇게
:
: 데이타가 되어 있어서 구분을 할 수 없군요
:
: slList.Delimiter := '|';
: slList.DelimitedText:=Str;
:
: 이럴경우 '청주시 상당구' 처럼 글자가 공백인 경우에는 다르게 구분해버리네요...(..'청주시', '상당구'..)
:
: 델파이7을 사용중이라 StrictDelimiter 프로퍼티는 지원이 안되네요....
:
: 그래서 공백을 없애고자
:
: ExtractStrings(['|'],[],PChar(Str),slList);를 사용하면 데이타가 없는구분자의 공백이 데이타로 들어오지 않네요..
:
: 이때에는 '청주시 상당구','영동','0','874'..처럼 '영동' 다음의 공백은 없어져 버려요..
:
: 이데이타를 제대로 추출할 방법이 없을까요?
:
: 함수를 따로 만들어야 할까요?