Q&A

  • 파일은 선택 안하구 데이터 찾기
화면의 edit박스에서 입력 받은 값을 현재 실행파일이 실행된 경로에서
*srt*.idx 파일에서 데이타를 찾으려고 합니다.
이 경로에는 srt을 포함하면서 idx로 확장자가 끝나는 파일은 하나 밖에 없습니다. srt앞뒤에 어떤 이름이 올지는 모르구요.
*srt*.idx 파일은 다음과 같이 구성 되어 있습니다.  
a  1
b 10
c 20
d 30
만약 화면에서 입력 받은 값이 'b'라면 찾고자 하는 값은
b의 뒤에 있는 10과 다음줄에 있는 20을 알고자 합니다.

그럼 많은 답변 부탁 드려요.
3  COMMENTS
  • Profile
    구창민 2002.12.19 00:40
    안녕하세요~ 구창민입니다.

    와일드 카드(*,? ..)를 사용해서 파일을 찾는 부분은

    Http://www.delphi.pe.kr 의 팁강좌란에 가셔서 "파일찾기"란 단어로

    검색해보시면 해결하실 수 있을거구요,

    찾은 파일은 StringList 를 생성하셔서 작업하시면 수월하게 작업을 하실수

    있을 겁니다.

    말씀하신 구성대로 간단히 예를 들면, 대강 아래 형태가 되겠지요..

    보시고 참고하시길 바랍니다.

    var
      StringList : TStringList;
      Index : integer;
    begin
      StringList := TStringList.Create;
      StringList.LoadFromFile('C:a.txt');
      for Index := 0 to StringList.Count - 1 do
      begin
        if Pos('b ', StringList.Strings[Index]) > 0 then
        begin
          ShowMessage(StringList.Strings[Index]);
          ShowMessage(StringList.Strings[Index + 1]);
          Break;
        end;
      end;
      FreeAndNil(StringList);
    end;

    그럼 항상 즐거운 프로그래밍 하시길~



  • Profile
    유현 2002.12.19 02:43
    Http://www.delphi.pe.kr 의 "파일찾기"를 보고 똑같이 구현 했는데 실행이 안되네요. 그쪽에 있는 팁 한번 확인해주셨으면 합니다. 델파이 4.0입니다. 
    그리구답변 감사합니다.

  • Profile
    구창민 2002.12.19 03:30
    어떻게 안되신다는 것인지..^_^;

    제가 방금 변수를 풀어서 작성해보니 정상적으로 동작을 하는군요.

    아래 내용의 이벤트들을 잘 붙여넣으셔서 동작시켜 보세요.

    아마 정상적으로 동작할겁니다.

    그럼~ 즐거운 프로그래밍 하시길~~

    unit Unit1;

    interface

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

    type
      TForm1 = class(TForm)
        Button1: TButton;
        ListBox1: TListBox;
        Edit1: TEdit;
        Button2: TButton;
        Label1: TLabel;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
        searchcheck : Boolean;
        procedure FilesSearch(Directory, SearchName: string);
      end;

    var
      Form1: TForm1;

    implementation

    {$R *.DFM}


    procedure TForm1.FilesSearch( Directory, SearchName: String );
    var  SR : TSearchRec;
         R  : integer;
    begin
      if Directory[Length(Directory)] <> '' then  Directory := Directory + '';
      R := Sysutils.FindFirst(Directory + SearchName, faAnyFile, sr);

      while R = 0 do
      begin
        if (SR.Attr <> faDirectory) and (SR.Name[1] <> '.') then
          if sr.FindData.cAlternateFileName <> '' then
             ListBox1.Items.Add(Directory + sr.FindData.cAlternateFileName)
          else
             ListBox1.Items.Add(Directory + sr.FindData.cFileName);
        if Searchcheck = False then Exit;
        Application.ProcessMessages;
        R := Sysutils.FindNext(sr);
      end;
      SysUtils.FindClose(Sr);

      if FindFirst(Directory + '*.*', faDirectory, SR) = 0 then
      begin
        repeat
           if ((Sr.Attr and faDirectory) = faDirectory) and (SR.Name[1]<>'.') then
           begin
             //아래 라인은 search라는 외부 변수를 만들고 취소버튼을 누를경우 searchcheck:= False 한 경우이다
             if Searchcheck = False then Exit;
             FilesSearch(Directory+SR.Name+'', SearchName); // 재귀호출
           end;
            Application.ProcessMessages;
            Label1.Caption := Directory + ' 에서 찾는중...';
        until (FindNext(SR) <> 0);
      end;
      SysUtils.FindClose(sr);
    end;



    //사용예) '*.doc', 'abc.???', 'a*.txt'..등등..
    //윈도그즈에서 검색하는 형태로 하실 수 있습니다.
    procedure TForm1.Button1Click(Sender: TObject);
    var
      Dir: string;
    begin
      Searchcheck := True;
      ListBox1.Clear;
      Dir:= 'c:';
      FilesSearch(Dir, Edit1.Text);
    end;


    //검색도중 취소버튼
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      Searchcheck := False;
    end;

    end.