Q&A

  • 파일에서 토큰을 이용해서 단어를 가져오는 함수나 프로시져가 없습니까
c나 java같은 언어는 토큰을 이용해서 파일에서

단어들을 가져올 수 있는 함수가 있는 것으로 알고 있습니다.

델파이는 없는지요

찾지를 못하겠군요

감사합니다.

1  COMMENTS
  • Profile
    김영대 1999.10.08 19:33
    서영재 wrote:

    > c나 java같은 언어는 토큰을 이용해서 파일에서

    > 단어들을 가져올 수 있는 함수가 있는 것으로 알고 있습니다.

    > 델파이는 없는지요

    > 찾지를 못하겠군요

    > 감사합니다.



    "token을 이용해서 단어를 가져온다"의 동작이 단어 찾기를 의미하나요?

    텍스트 파일에서 특정 문자열이 있는지 검사하는 루틴이라면 아래를 참고하세요



    unit Unit1;



    interface



    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    StdCtrls, ComCtrls;



    type

    TForm1 = class(TForm)

    Button1: TButton;

    OpenDialog1: TOpenDialog;

    ProgressBar1: TProgressBar;

    Edit1: TEdit;

    procedure Button1Click(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    end;



    var

    Form1: TForm1;



    implementation

    {$R *.DFM}



    // PosInFile()는 해당 파일에서 문자열을 찾으면 그 바이트 위치를 리턴하며

    // 파일에 문자열이 없으면 -1을 리턴합니다

    function PosInFile(Str, FileName: String; PBar: TProgressBar): Integer;

    var

    Buffer: array[0..1023]of char;

    BufPtr,BufEnd: integer;

    F: File;

    Index: integer;

    Increment: integer;

    c:char;



    function NextChar:char;

    begin

    if BufPtr >= BufEnd then

    begin

    BlockRead(F, Buffer, 1024, BufEnd);

    BufPtr := 0;

    PBar.Position := FilePos(F);

    Application.ProcessMessages;

    end;

    Result := Buffer[BufPtr];

    Inc(BufPtr);

    end;



    begin

    Result := -1;

    AssignFile(F, FileName);

    Reset(F,1);

    PBar.Max := FileSize(F);

    BufPtr := 0;

    BufEnd := 0;

    Index := 0;

    Increment := 1;

    repeat

    c := NextChar;

    if c = Str[Increment] then

    Inc(Increment)

    else

    begin

    Inc(Index, Increment);

    Increment := 1;

    end;

    if Increment = (Length(Str)+1) then

    begin

    Result := Index;

    Break;

    end;

    until BufEnd = 0;

    CloseFile(F);

    PBar.Position := 0;

    end;



    procedure TForm1.Button1Click(Sender: TObject);

    var

    ret: integer;

    begin

    if OpenDialog1.Execute then

    begin

    ret := PosInFile(Edit1.Text, OpenDialog1.FileName, ProgressBar1);

    if ret = -1 then

    ShowMessage('찾는 문자열이 파일에 없습니다')

    else

    ShowMessage(IntToStr(ret)+' 번째 위치에 문자열이 있습니다');

    end;

    end;



    end.