Q&A

  • TStringList에 대해서....

안녕 하세요 ..

TStringList에 대해서 궁금한 점이 있어서 이렇게 글을 올립니다 ...

다름이 아니라..

aaaa|bbbb|cccc|(랜덤한 data의 바이트값, 길이는 고정)

이런 데이터를 TStringList에 추가 했을 경우에요...

'|' 이 문자를 기준으로 해서 짤라 낼 수 있나요..

ExtractStrings(['|'], [' '], PChar(위의 데이터), TStringList);

이런씩으로 하면 될 것 같은데요.. 맨 뒤에 있는 랜덤한 바이트 값이 문제 입니다.

0 ~ 255 까지 아무값이나 데이터를 가질 수 있기 때문이죠..


그리고,


만일에.. '|' 를 기준으로 데이터를  잘라 다구 했을 때.....

TStringList에 한 번 저장 된 값을 가져 오는거 잖아요..

이때.. 맨 뒤에 있는 랜덤한 바이트 값을 제대로 가져 오는지요..

랜덤한 값이기 때문에..  #13, #10이 나오지 말란 보장이 없을 듯 해서요..

아무런 영향을 안 미친다면이야. . 괜찮지만.. 제가 아직 델파이에는 초보라서요..


읽어 보시고.. 많은 답변 부탁드립니다..

그럼.. 좋은 하루 보내세요...
2  COMMENTS
  • Profile
    천희택 2005.06.21 23:43
    delimiter와 delimitedtext를 사용하시면 됩니다. 그러나 중간에 공백이나 특수문
    자가 있으면 생각처럼 잘 작동하지 않습니다. 파싱 함수를 만드시는게....
    다음은 제가 쓰는 함수 입니다..

    function StringSplit(Section : string; Line : string) : String;
    var ReturnList : TStringList;
        ResultText : string;
    begin
        ReturnList := TStringList.Create;

        while Pos(Section, Line) > 0 do
        begin
            ReturnList.Add( copy(Line, 1, Pos(Section, Line) - 1) );
            Line := Copy(Line, Pos(Section, Line) + 1, Length(Line) - Pos(Section, Line));
        end;


        ResultText := ReturnList.Text;
        ReturnList.Free;
        ReturnList := nil;
        Result := ResultText;
    end;

    받는 쪽에서는

    StringList.text := StringSplit('|', 'aaaa|bbbb|cccc|')

    하시면 됩니다.
  • Profile
    nilriri™ 2005.06.21 08:43
    앞에 aaaa, bbbb,cccc 가 고정길이고 항상 3개가 나온다면 그리고 저 3개와 마지막 데이터 한개를 포함해서 나눠야할 데이터가 4개로 고정이라면 굳이 tstringlist와 extra...를 사용할 필요가 없을것 같습니다.

    차라리 앞에서 15자리를 제외하고 뒷부분 전체를 하나의 데이터를 처리하시면 될거 같습니다..

    extractstrings를 쓴다면 문자열 분리자로 지정한 문자가 나타날때마다 tstringlist에 아이템을 하나씩 add시켜 나갑니다..

    extractstrings를 호출한 뒤에 인수로 주어졌던 stringlist의 item.count를 확인해 보시면 됩니다..

    4개로 고정이라면 count도 4가 나와야겠지요..


    그렇지 않다면 문자열 분리자로 사용한 '|' 문자가 데이터 내부에도 존재한다는 것일테니까요..


    문자열 다룰때 가끔 특수문자 (#0) 같은게 있을때 에러가 났던 기억이 있습니다.