Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.02.2012, 15:05   #1
Firstchar
Пользователь
 
Регистрация: 29.09.2011
Сообщений: 23
По умолчанию disk read error при чтении из типизированного файла

задание заключается в том, чтобы создать 2 типизированных файла, в одном список спортсменов (фанилия, год рожденя, группа и средний балл каждого), в другом такой же список художников. и необходимо создать третий файл со списком тех, кто записан и в 1 и во 2 списках.
вроде все написано правильно, но при выполнении программы выскакивает ошибка "disk read error" и указатель становится в начало строчки чтения из файла (в коде помечу комментарием).

Код:
uses crt;
type student=record
familia:string[20];
god:integer;
gruppa:string[10];
ball:real;
end;
var st,st2:student;
f1,f2,f3:file of student;
i,n,j,k:integer;
s_name,h_name,sh_name:string;
procedure name_file1;
begin
     write('введите название файла со списком спортсменов: ');
     readln(s_name);
end;
procedure name_file2;
begin
     write('введите название файла со списком художников: ');
     readln(h_name);
end;
procedure name_file3;
begin
          write('введите название файла со списком спортсменов-художников: ');
          readln(sh_name);
end;
procedure sport_create;
begin
name_file1;
assign(f1,s_name);
write('количество спортсменов: ');
readln(n);
rewrite(f1);
for i:=1 to n do
begin
with st do
begin
write('фамилия: ');
readln(familia);
write('год рождения: ');
readln(god);
write('группа: ');
readln(gruppa);
write('средний балл: ');
readln(ball);
write(f1,st);
end;
end;
close(f1);
end;
procedure hud_create;
begin
name_file2;
assign(f2,h_name);
write('количество художников: ');
readln(j);
rewrite(f2);
for i:=1 to j do
begin
with st2 do
begin
write('фамилия: ');
readln(familia);
write('год рождения: ');
readln(god);
write('группа: ');
readln(gruppa);
write('средний балл: ');
readln(ball);
write(f2,st2);
end;
end;
close(f2);
end;
procedure sh_create;
begin
name_file3;
assign(f3,sh_name);
rewrite(f3);
name_file1;
assign(f1,s_name);
reset(f1);
seek(f1,0);
name_file2;
assign(f2,h_name);
reset(f2);
seek(f2,0);
for i:=1 to n do
begin
read(f1,st);
for k:=1 to j do
begin
read(f2,st2);       {вначале этой строки стоит курсор, когда программа прерывается ошибкой}
if st.familia=st2.familia then
begin
write(f3,st);
end;
end;
end;
close(f1);
close(f2);
close(f3);
end;
begin
textcolor(red);
textbackground(white);
clrscr;
sport_create;
hud_create;
sh_create;
writeln('готово');
readln;
end.
что тут может быть не так? я себе уже голову сломал.
p.s. прошу прощения за страшный код, изза этой ошибки уже переписал все что только можно. изначально было привлекательнее

Последний раз редактировалось Firstchar; 01.02.2012 в 15:08.
Firstchar вне форума Ответить с цитированием
Старый 01.02.2012, 15:50   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
reset(f2);
seek(f2,0);
Зачем принудительный seek? Reset итак в начало указатель файла переводит.
Цитата:
disk read error
Имя файла верное? Он никем не открыт при выполнении проги?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.02.2012, 00:57   #3
Firstchar
Пользователь
 
Регистрация: 29.09.2011
Сообщений: 23
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Зачем принудительный seek? Reset итак в начало указатель файла переводит.
я просто где-то вычитал что такая ошибка может возникать при попытке чтения после окончания файла, решил подстраховаться. а так да, seek устанавливает указатель в начало.

благодарю за ответ. действительно файл был открыт блокнотом всё то врея, что я пытался разобраться с этой ошибкой,а я даже не помнил этого, закрыл и всё работает отлично, спасибо.
p.s. тему можно закрывать
Firstchar вне форума Ответить с цитированием
Старый 02.02.2012, 10:07   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

кстати, а Вас не смущает, что у Вас тип записи называется student и в нём заносятся характеристики не художника и не спортсмена - а именно студента?!
я понимаю, что Вы воспользовались чужим примером/программой как шаблоном для своего решения, ну надо же было доработать..
поэтому возможны проблемы со сдачей...


p.s. Если хотите - тему я могу закрыть...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.02.2012, 12:24   #5
Firstchar
Пользователь
 
Регистрация: 29.09.2011
Сообщений: 23
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
кстати, а Вас не смущает, что у Вас тип записи называется student и в нём заносятся характеристики не художника и не спортсмена - а именно студента?!
я понимаю, что Вы воспользовались чужим примером/программой как шаблоном для своего решения, ну надо же было доработать..
поэтому возможны проблемы со сдачей...


p.s. Если хотите - тему я могу закрыть...
вы ошиблись, писал я от себя.
а тип записи называется студент потому что и художники и спортсмены, все студенты, делал бы массивы записей, тогда был бы 1-спортсмены, 2-художники.
а так я просто по очереди вношу студентов сначала в файл со спортсменами, а потом в файл с художниками.
Firstchar вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при чтении из файла BEL9ILLI Общие вопросы C/C++ 3 13.01.2012 10:12
Turbo Pascal - при чтении типизированного файла #100 Disk read error triple A Помощь студентам 9 16.05.2011 22:38
Кодировка при чтении из файла _-Re@l-_ Общие вопросы .NET 2 21.11.2010 20:12
Ошибка: Disk read error freewix Паскаль, Turbo Pascal, PascalABC.NET 0 06.06.2010 09:23
ошибка при чтении файла ongleb Общие вопросы C/C++ 17 30.07.2009 13:48