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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.05.2011, 11:21   #1
dima-intro
Пользователь
 
Аватар для dima-intro
 
Регистрация: 11.12.2010
Сообщений: 43
Вопрос Сохранение и открытие файла

procedure TUniver.OpenClick(Sender: TObject);
var f1:TFFacultet; f2:TFKafedra; f3:TFGroup; f4:TFStudent;
p2,p3,p4:integer; Name:string;
r1:TRecFacultet; r2:TRecKafedra; r3:TRecGroup; r4:TRecStudent;
pp1,fp1:TPFacultet; pp2,fp2:TPKafedra; pp3,fp3:TPGroup;
ok:boolean;
begin
if OpenDialog1.Execute then begin
if start<>nil then DelSpis1(start);
Name:=OpenDialog1.FileName;
AssignFile(f1, Name);
Reset(f1);
AssignFile(f2, Name+'kaf');
Reset(f2);
AssignFile(f3, Name+'gro');
Reset(f3);
AssignFile(f4, Name+'stu');
Reset(f4);

while not EOF(f1) do begin
Read(f1,r1);
r1.f_sub:=nil;
AddToList1(start,r1);
FindEl1(start, r1.f_nazv2, pp1,fp1, ok);
for p2:=1 to fp1^.f_file do begin
Read(f2, r2);
r2.k_sub:=nil;
AddToList2(fp1^.f_sub, r2);
FindEl2(fp1^.f_sub, r2.k_nazv1, pp2,fp2, ok);
for p3:=1 to r2.k_file do begin
Read(f3, r3);
r3.g_sub:=nil;
AddToList3(fp2^.k_sub, r3);
FindEl3(fp2^.k_sub, r3.g_nazv, pp3,fp3, ok);
for p4:=1 to r3.g_file do begin
Read(f4, r4);
AddToList4(fp3^.g_sub,r4);
end;
end;
end;
end;

CloseFile(f4); CloseFile(f3); CloseFile(f2); CloseFile(f1);
end;
ShowInLB1(start, LB1);
end;


мой код процедуры открытия файла (сохранение работает хорошо)
а вот открытие прерывается в строке Read(f2, r2); (ошибка Read beyond end of file)
кому не сложно, очень прошу объяснить в чем дело (курсовой, очень срочно)
спасибо.
dima-intro вне форума Ответить с цитированием
Старый 22.05.2011, 11:32   #2
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
а вот открытие прерывается в строке Read(f2, r2); (ошибка Read beyond end of file)
Судя по названию ошибки, где-то выше указатель в файле f2 был установлен в конец файла, либо же этот файл вообще пустой.
Вадим Мошев вне форума Ответить с цитированием
Старый 22.05.2011, 19:18   #3
dima-intro
Пользователь
 
Аватар для dima-intro
 
Регистрация: 11.12.2010
Сообщений: 43
По умолчанию

procedure TUniver.SaveAsClick(Sender: TObject);
var Name:string; f1:TFFacultet; f2:TFKafedra; f3:TFGroup; f4:TFStudent;
FTek:TPFacultet; KTek:TPKafedra; GTek:TPGroup; STek:TPStudent;
p2,p3,p4:integer;
begin
if SaveDialog1.Execute then
begin
Name := SaveDialog1.FileName;
AssignFile(f1, Name);
Rewrite(f1);
AssignFile(f2, Name+'kaf');
Rewrite(f2);
AssignFile(f3, Name+'gro');
Rewrite(f3);
AssignFile(f4, Name+'stu');
Rewrite(f4);
FTek:=start; p2:=0; p3:=0; p4:=0;
while FTek<>nil do begin
KTek:=FTek^.f_sub;
p2:=0; p3:=0; p4:=0;
while KTek<>nil do begin
GTek:=KTek^.k_sub;
p3:=0; p4:=0;
while GTek<>nil do begin
STek:=GTek^.g_sub; p4:=0;
while STek<>nil do begin
write(f4, STek^);
p4:=p4+1; STek:=STek^.s_next; end;
GTek^.g_file:=p4;
write(f3, GTek^);
GTek:=GTek^.g_next;
p3:=p3+1;
end;
KTek^.k_file:=p3;
write(f2, KTek^);
KTek:=KTek^.k_next;
p2:=p2+1;
end;
FTek^.f_file:=p2;
write(f1, FTek^);
FTek:=FTek^.f_next;
end;
CloseFile(f4); CloseFile(f3); CloseFile(f2); CloseFile(f1);
end;
end;


это моя проц-ра сохранения в файл.
с ней вроде все в порядке...
или я не прав?
dima-intro вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сохранение и открытие Malyava Помощь студентам 1 11.03.2011 12:07
Открытие и сохранение файлов в Delphi darth Mark Помощь студентам 8 10.05.2010 13:10
Открытие/сохранение файла НеВа6464 Microsoft Office Excel 4 01.06.2009 14:06
Сохранение и открытие в бд MargoNik БД в Delphi 20 27.04.2009 15:43
Сохранение и открытие файлов Kantor Общие вопросы Delphi 1 15.12.2008 05:21