Форум Программирование Помогите выявить ошибки в коде |
|
Помогите пожалуйста найти ошибки в коде. При нажатии на кнопку Выполнить после прикрепления текстового файла вываливает ошибку. Задание:Разработать программу, которая осуществляет поиск в массиве записей информации о студенте, фамилия которого вводится с клавиатуры. Исходные данные вводятся из текстового файла. unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls; type TForm1 = class(TForm) RichEdit1: TRichEdit; Run: TButton; Clear: TButton; Exit: TButton; Info: TButton; Open: TButton; OpenDialog1: TOpenDialog; Label1: TLabel; Edit1: TEdit; procedure ClearClick(Sender: TObject); procedure ExitClick(Sender: TObject); procedure InfoClick(Sender: TObject); procedure RunClick(Sender: TObject); procedure OpenClick(Sender: TObject); private { Private declarations } public { Public declarations } end; Type Data=Record Year:1980.. 1995; Month:1..12; Day:1..31; End; Zap = Record Fam:string[20]; Birthday : data; End; var Form1: TForm1; r:array of Zap; Famyl,FName:string; i,j:byte; k:boolean; F:Textfile; l:array of AnsiString; implementation {$R *.dfm} procedure TForm1.ClearClick(Sender: TObject); begin RichEdit1.Clear; end; procedure TForm1.ExitClick(Sender: TObject); begin Form1.Close; end; procedure TForm1.InfoClick(Sender: TObject); begin RichEdit1.Lines.LoadFromFile('info.txt'); end; procedure TForm1.OpenClick(Sender: TObject); begin if OpenDialog1.Execute then RichEdit1.Lines.LoadFromFile(OpenDialog1.FileName); end; procedure TForm1.RunClick(Sender: TObject); begin if OpenDialog1.Execute then begin AssignFile(F, OpenDialog1.FileName); reset(F); i:=1; repeat with r[i] do begin readln(F,fam); with birthday do begin readln(F,year); readln(F,month); readln(F,day); end; end; i:=i+1; until eof(F); CloseFile(F); j:=i-1; for i:=1 to j do with r[i] do RichEdit1.Text:=RichEdit1.Text+#13#10+Fam+' '+inttostr(birthday.day)+' '+inttostr(birthday.month)+' '+inttostr(birthday.year); Famyl:=Edit1.Text; i:=0; k:=false; repeat i:=i+1; if r[i].fam=Famyl then k:=true until (k=true) or (i=j) ; if k then begin with r[i] do RichEdit1.Text:=RichEdit1.Text+#13#10+Fam+' '+inttostr(birthday.day)+' '+inttostr(birthday.month)+' '+inttostr(birthday.year); end else RichEdit1.Text:=RichEdit1.Text+#13#10+'Студент не найден'; end; end; end. | ||||||
|
Программа будет точно глючить, если файле нет ни одной записи. Галочка "подтверждения прочтения" - вселенское зло. | ||||||
|
Записи там есть, это точно. | ||||||
|
Просмотрел код. ИМХО, я бы переписал его с нуля, по-нормальному. Изложи задание полностью, может быть что-нибудь посоветую. Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! | ||||||
Перейти в раздел:
© 2004 - 2024, Delphi.int.ru |
Версия форума: 1.10 (19.01.2010) |
Выполнено за 0.02 сек. |