문자열을 구분자로 쪼개어 StringList에 넣기( ExtracString 대체 품 )

안녕하세요..^^ ( 속도가 느리다고 해서리 조금 수정해보았습니다. )

흠.. 질답란에도 그렇고 가끔 보면.. Comport나 기타 문열로 주구장창 들어온 내용을 구분자를 이용해서 나누려고 할때 ExtracStrings를 사용합니다.
근데.. 아시듯이 이넘은 몇가지 문제가 있습니다. 뭐 제가 사용법을 몰라서 그럴수도 있구요 ^^;

예를들어 의 경우 #1로 구분자를 넣는경우 2번 내용이 없어서 ‘1번’+#1#1+’3번’을 만들고 이 값을
ExtracStrings하시면 StringList에 ‘1번’, ‘3번’ 만 나오는 것이죠.
의도와는 다른 값이 나와 가끔 당황스럽습니다.

또 한예는 문자 하나로는 불가능 하고 ‘{1}’처럼 2문자 이상의 문자열로 구분자를 주고 싶은 경우 입니다.
이런 경우도 쪼끔 당황 스럽습니다.

이를 보완하고자 만들어본것인데, 몇년된것을 조금 손봐서 다시 만들었습니다.
소스 나갑니다.

Function Str2Words( CurrentStr, CutStr : String; StrList : TStringList ) : Integer;
Var
  TS : String;
  LPos, fPos, i,
  S_L, C_L : Integer;
  pStr, tStr, iStr : PCHar;
  bCut : boolean;
Begin
  S_L := Length( CurrentStr );
  C_L := Length( CutStr );

  pStr := PChar( CurrentStr );
  tSTr := pStr;

  lPos := 0;
  fPos := 0;
  StrList.BeginUpdate;
  try
    Repeat
      bCut := tStr^ = pChar(CutStr)^;
      If bCut then
      begin
        iStr := tSTr;
        for i := 1 to C_L - 1 do
        begin
          inc( iStr );
          if iStr^ <> ( pChar( CutStr ) + i )^ then Break;
        end;
        if i < C_L Then
          bCut := False;
      end;

      If bCut Then
      begin
        SetString( TS, pStr, lPos - fPos );
        StrList.Add(Ts);
        inc( lPos, C_L );
        fPos := lPos;
        Inc( tStr, C_L );
        pStr := tStr;
      end
      else
      begin
        inc( lPos );
        inc( tStr );
      end;
    until lPos >= S_L;

    SetString( TS, pStr, tStr - pStr );
    StrList.Add(TS);
  finally
    StrList.EndUpdate;
  end;
  Result := StrList.Count;
End;

>>>>>>>>>>>>>>>>사용법<<<<<<<<<<<<<<<<<<

procedure TForm1.Button1Click(Sender: TObject);
var
  Str : string
  StrList: TStringList;
begin
  Str := '1번'+'{구분자}{구분자}'+'3번'
  StrList := TStringList.Create;
  Try
    StrList.Clear;
    If Str2Words( Str ,'{구분자}', StrList ) > 0 then
    begin
      ListBox1.Items.Clear;
      ListBox1.Items.Assign( StrList );
    end;
  finally
    freeAndNil( StrList );
  end;
end

참고되시기 바랍니다. << 저작자 : 김말동 >>

Author: yyjksw