Q&A

  • 문자열을 잘라낼때 TParser에서 한글을 인식하지 못하는데...
예전에 질문을 올렸었는데요..
문자열을 잘라내는 방법으로 TParser를 알려주셨습니다..

그런데...

TParser에서 한글을 인삭하지 못하는 거 같은데..

다른 좋은 방법없을까요??

;ㅁ;

하나가 해결되는 거 같으면..
다른 하나가 문제구..
역시 프로그래밍의 길은 멀고도 험합니다..

고수분들의 조언..부탁드립니다..
1  COMMENTS
  • Profile
    김영대 2003.04.03 06:08
    // 안녕하세요  김영대(http://www.howto.pe.kr) 입니다  

    unit Unit1;

    interface

    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;

    type
      TForm1 = class(TForm)
        Edit1: TEdit;
        Memo1: TMemo;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;

    type
      TToken = record
        word: String; // word(token)
        start: integer; // word의 시작 위치
        len: integer; // word의 길이
      end;

    const
      Delimiters = '?=@+;!.,?_/~&[]<>#`{}:$%^&()*;" '+#9#10#13#44#46#59;

    var
      Form1: TForm1;

    implementation
    {$R *.dfm}

    function GetTToken(const text: string; var Token: TToken; var index: integer): Boolean;
      function isDelimiter(const c: char): boolean;
      begin
        Result := Pos(c, delimiters) > 0;
      end;
    var
      TextLength: integer;
    begin
      with Token do
      begin
        TextLength := length(text);

        // 연속하는 구분자들을 skip 한다
        start := index;
        while isDelimiter(text[start]) and (start < TextLength) do
          inc(start);

        // 더이상 token 없음
        if start > TextLength then
        begin
          word := '';
          Result := false;
          exit
        end;

        // token을 구한다      
        len := start;
        while not isDelimiter(text[len]) do
          inc(len);
        len := len-start; // 길이
        word := copy(text, start, len); // token
        index := start+len; // 시작위치

        Result := word <> '';
      end;
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    var
      index: integer;
      token: TToken;
    begin
       index := 1;
       while GetTToken(Edit1.Text, token, index) do
         Memo1.Lines.add('토큰:'+token.word+
                         ',  시작위치:'+inttostr(token.start)+
                         ',  길이:'+inttostr(token.len));
    end;

    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Edit1.Text := ',김영대,우하하;3455;"howto"';
    end;

    end.