Помощь - Поиск - Пользователи - Календарь
Полная версия: чтение из файла
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Venom
Помогите исправить ошибку. Когда читаешь из файла во время работы программы то все вроде нормально, но когда выйдешь из нее и запустишь заново, то программа отказывается читать из него и либо зависает, либо выдает ошибку с кодом 203.
arhimag
ты его не закрываешь добавь close(f);

при чтении
volvo
Цитата
ты его не закрываешь
И что? Файл, открытый через Reset, может и НЕ закрываться, ничего страшного (в виде потери данных) не будет...
arhimag
я поставил close и у меня при повторном запуске вылетать перестала.
Venom
Добавил close(f) и только все равно в процедуре Insert_List на месте new(pList) ошибку 203 выдает. И еще почему-то после неудачного чтения фаил увеличивается в размере с 1Kb до 23Mb. С чем это связано?
Bokul
У тебя она (Insert_List) совсем не правильна. Объясни назначение переменных lp,pList,pStart:pEl_list.
Как я понял
pList - вспомогательная, лучше не делать глобальной
lp - указывает на последний элемент списка
pStart - на первый, ее можно и нужно убрать

И вообще лучше комментируй код.
arhimag
слушай, парень, помоему у тебя ваапще стек не правильно реализован, ты залезь в FAQ, есть неплохая работа со списками и стеками smile.gif авось поможет

Все о динамических структурах данных.
Bokul
Не знаю как стек, но список точно не правильно.. smile.gif
Вот рабочий вариант, разбирайся.

program MIFI;

uses crt;

Const
p_menu:array[1..4] of string[30]=(
'1.‘®§¤ вм д ©« Ё бЇЁб®Є',
'2.Џа®зЁв вм д ©« Ё§ бЇЁб®Є ',
'3.‚лў®¤ бЇЁбЄ ­ нЄа ­',
'4.‚л室');

type
list_d=record
Title:string[20];
Nm,Pt,data,pol:string[15];
mesto,adres:string[30];
end;

ff=file of list_d;

pEl_list=^list;
list=record
li:list_d;
next:pEl_list;
end;

var
lp,pList:pEl_list;
f:ff;
li:list_d;
noswap:Boolean;
ch:char;
i,oi,kol,nomermenu:integer;

procedure init;
begin
lp:=nil;
end;

procedure DeleteList;
begin
while lp<>nil do begin
pList:=lp;
lp:=lp^.next;
Dispose(pList);
end;
end;

procedure Insert_list(el:list_d);
begin
new(pList);
with pList^ do begin
li.Title:=el.Title;
li.Nm:=el.Nm;
li.Pt:=el.Pt;
li.data:=el.data;
li.pol:=el.pol;
li.mesto:=el.mesto;
li.adres:=el.adres;
next:=lp;;
end;
lp:=pList;
end;

procedure SaveBase_in_file;
var
FileName:string;
k:char;
begin
FileName:='wer.bas';
Assign(f,FileName);
Rewrite(f);
repeat;
with li do begin
writeln('‚ў®¤ЁвҐ бЇЁб®Є:':25);
write('” ¬Ё«Ёп: ');
readln(Title);
write('€¬п: ');
readln(Nm);
write('ЋвзҐбвў®: ');
readln(Pt);
write('„ в ஦¤Ґ­Ёп: ');
readln(data);
write('Џ®«: ');
readln(pol);
write('ЊҐбв® а Ў®вл: ');
readln(mesto);
write('„®¬ и­Ё© ¤аҐб: ');
readln(adres);
end;
write(f,li);
writeln('…бвм ҐйҐ бўҐ¤Ґ­Ёп ¤«п бЇЁбЄ ?');
readln(k);
until k='n';
close(f);
writeln('„ ­­лҐ б®еа ­Ґ­л. Ќ ¦¬ЁвҐ «оЎго Є« ўЁиг.');
readkey;
end;

procedure List_creat;
begin
Init;
Assign(f,'wer.bas');
reset(f);
while not EoF(f) do begin
read(f,li);
Insert_list(li);
end;
close(f);
end;

procedure List_displ;
Var i:integer;
begin
i:=1;
plist:=lp;
writeln('‘ЇЁб®Є Ў®­Ґ­в®ў Ё¬ҐойЁебп ў д ©«Ґ');
while plist<>nil do begin
write(i,' ');
write(lp^.li.Title+' ');
write(lp^.li.Nm+' ');
write(lp^.li.Pt+'; ');
write(lp^.li.data+'; ');
write(lp^.li.pol+'; ');
write(lp^.li.mesto+'; ');
writeln(lp^.li.adres);
plist:=plist^.next;
i:=i+1;
end;
end;

procedure MENU(var nomermenu:integer);
var
x,y,i:integer;
c:char;
begin
x:=28;
y:=1;
gotoXY(x,8);
textcolor(13);
writeln(' ‚лЎҐаЁвҐ Їг­Єв ¬Ґ­о: ');
textcolor(3);
for i:=1 to 4 do begin
gotoXY(x,i+8);
writeln(p_menu[i]);
end;
textcolor(4);
gotoXY(x,y+8);
writeln(p_menu[y]);
while true do begin
c:=readkey;
case ord( c ) of
80:if y<4 then y:=y+1;
72:if y>1 then y:=y-1;
13:break;
end;
gotoXY(x,8);
textcolor(13);
writeln(' ‚лЎҐаЁвҐ Їг­Єв ¬Ґ­о: ');
textcolor(3);
for i:=1 to 4 do begin
gotoXY(x,i+8);
writeln(p_menu[i]);
end;
textcolor(4);
gotoXY(x,y+8);
writeln(p_menu[y]);
end;
nomermenu:=y;
textcolor(white);
end;

begin
while true do begin
clrscr;
menu(nomermenu);
case nomermenu of
1:begin clrscr;
writeln('„®«¦Ґ­ д®а¬Ёа®ў вмбп бЇЁб®Є');
SaveBase_in_file;
end;
2:begin clrscr;
{if pStart=nil then begin }
writeln('Џа®зЁв ©вҐ ¤ ­­лҐ Ё§ д ©« ');
List_creat;
readln; end;
3:begin clrscr;
List_displ;
readln;
end;
4:begin clrscr;
writeln('‚л е®вЁвҐ г­Ёз⮦Ёвм бЇЁб®Є - y or n?':36);
readln(ch);
if ch='y' then DeleteList;
halt;
end;
end;
end;
end.

Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.