안녕 하세요..
TStringList 구현 부분에서 조언을 구하고자 합니다.
먼저. 설명을 하자면..
'aaa|bbb|ccc|랜덤한 데이터 값' -> TStringList에 들어갈 데이터 입니다.
이런씩으로 데이터가 들어가며, 랜덤한 데이터 값
사이에는 '|'(구분자)가 3개가 들어갑니다.
TStringList에 들어갈 데이터중 '|' 구분자는 총 6개에서 5개 둘중 하나입니다.
5개가 될 경우는 맨 앞부분에 오는 'aaa'값이 빠질수가 있기 때문입니다.
그리고, 다른 데이터와의 구분은 맨 앞데이터('aaa'), 세번째 데이터('ccc')가 다른
데이터와 구분할 수 있는 기준이 됩니다.
좀.. 복잡하네요.. ^^;;
아래 소스를 보시고 다른 좋은 방법이 있으시면.. 조언 부탁드립니다.
DB로 구성해두 될것 같은데..
이 부분은 수시로 access를 해야 할 듯 해서요..
그냥.. TStringList로 하는 편이 좋을 듯해서.. 정했습니다.
이 틀에서.. 좀 개선할 사항이 있다면.. 조언 부탁드리겠습니다.
그럼.. 좋은 하루 보내세요..
//////////////////////////////////////////////////////////////////////////////
여기서 부터는 소스를 정리한겁니다.
strKey1, strKey2 : String;
SList , InfoList : TStringList;
bAdd : Boolean;
bAdd가 True가 되면.. 새로 추가를 하는거구.. 아니면. 그냥. 지나감.
strKey1 := 'aaa'+'|';
SetLength(strKey2, 5);
strKey2 := Format('%.5d|', [변수값]);
For i := 0 To InfoList.Count - 1 Do
Begin
if (Pos(strKey1, InfoList[i]) > 0) or (Pos(strKey2, InfoList[i]) > 0 ) Then
Begin
SList := TStringList.Create;
ExtractStrings(['|'], [' '], PChar(InfoList[i]), SList);
//이렇게 해서 이전 InfoList에 있는 값들을 잘라낸다.
//이 부분이 문제인 부분입니다..
//어떻게..결과는 나오는것 같은데요. 영.. 맘에 들지 않네요..
//분명 이상이 있을 듯한.. 예감이 드는 부분이라서요.. ^^;;
//
if SList.Count > 6 Then
InfoList[i] := strMsg+'|'+SList[3]+'|'+SList[4]+'|'+SList[5]+'|'+SList[6]
Else //count가 6 아니면 5만 나오기 때문....
InfoList[i] := strMsg+'|'+SList[2]+'|'+SList[3]+'|'+SList[4]+'|'+SList[5];
bAdd := false;
End;
if bAdd = true Then
Begin
//추가..
End;
End;
//////////////////////////////////////////////////////////////////////////////
그럼 이렇게 하면 되지않나요??
var
SList :TStringList;
begin
try
SList := TStringList.Create;
SList .Delimiter := '|';
SList .DelimitedText := 'aaa|bbb|ccc|어쩌구|저쩌구|등등';
// 이렇게 하면 구분자로 문자열이 분리되어 List 에 저장이 되는데 이걸 원하시는 건지??
finally
SList.Free;
end;
end;