поиск неиндексированного файла записи в паскале (Delphi 7) - PullRequest
1 голос
/ 20 августа 2011

Я создаю консольное приложение для друга с помощью Pascal в Delphi 7. Я отсортировал добавление записи и просмотр ее, но у меня возникли проблемы с поиском. Записи хранятся в файле .dat. Любая помощь будет отличной!

Спасибо!

мой код пока ...

Type
  BookRecord = Record
    Number : Integer;
    Title  : String[50];
    Author : String[50];
    ISBN   : String[13];
  end;

Var
  Book : BookRecord;
  f    : file of BookRecord ;   

Procedure Add_Book;
Var
  Title, Author, ISBN : String;
  i : integer;
Begin
  Assign (f, 'Books.dat');
  reset (f);
  Seek (f, filesize(f));
  Book.Number := (filepos(f)+1);
  Write  ('Title:  ');
  Readln (Title);
  For i := 1 to Length(Title) do
    Title[i] := UpCase(Title[i]);
  Book.Title := Title;
  Write  ('Author: ');
  Readln (Author);
  For i := 1 to Length(Author) do
    Author[i] := UpCase(Author[i]);
  Book.Author := Author;
  Write  ('ISBN:   ');
  readln (ISBN);
  For i := 1 to Length(ISBN) do
    ISBN[i] := UpCase(ISBN[i]);
  Book.ISBN := ISBN;
  write (f, Book);
  Close (f);
End;

Procedure Show_All;
Begin
  Assign (f, 'Books.dat');
  Reset (f);
  while FilePos(f) <> FileSize(f) do
  Begin
    Read (f,book);
    Writeln ('File:   ' , Book.Number);
    Writeln ('Title:  ' , Book.Title);
    Writeln ('Author: ' , Book.Author);
    Writeln ('ISBN:   ' , Book.ISBN);
    Writeln;
  end;
  Writeln; Writeln;
  Center ('END OF FILE!');
  readln;
  Close (f);
end;

Procedure Delete_All;
Begin
  Assign (f, 'Books.Dat');
  Reset (f);
  Seek (f,0);
  Truncate (f);
  Close (f);
end;

Это, в основном, мой код до сих пор ... Proc Add_Book, Show_All и Delete_All прекрасно работают, но как только я добавлю несколько записей, как мне будет искать автора?

1 Ответ

2 голосов
/ 20 августа 2011

Поскольку ваши записи не отсортированы по автору, вам необходимо использовать линейный поиск. Адаптируйте свою процедуру Show_All для достижения этой цели, просматривая каждую запись в поисках автора.

Если у вас большая база данных, то производительность будет проблемой, и вам следует рассмотреть возможность использования реальной базы данных.

...