Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ чтение из файла

Автор: Venom 3.01.2007 22:01

Помогите исправить ошибку. Когда читаешь из файла во время работы программы то все вроде нормально, но когда выйдешь из нее и запустишь заново, то программа отказывается читать из него и либо зависает, либо выдает ошибку с кодом 203.


Прикрепленные файлы
Прикрепленный файл  pack.zip ( 1.64 килобайт ) Кол-во скачиваний: 161

Автор: arhimag 3.01.2007 22:46

ты его не закрываешь добавь close(f);

при чтении

Автор: volvo 3.01.2007 22:55

Цитата
ты его не закрываешь
И что? Файл, открытый через Reset, может и НЕ закрываться, ничего страшного (в виде потери данных) не будет...

Автор: arhimag 3.01.2007 23:03

я поставил close и у меня при повторном запуске вылетать перестала.

Автор: Venom 4.01.2007 2:16

Добавил close(f) и только все равно в процедуре Insert_List на месте new(pList) ошибку 203 выдает. И еще почему-то после неудачного чтения фаил увеличивается в размере с 1Kb до 23Mb. С чем это связано?

Автор: Bokul 4.01.2007 2:43

У тебя она (Insert_List) совсем не правильна. Объясни назначение переменных lp,pList,pStart:pEl_list.
Как я понял
pList - вспомогательная, лучше не делать глобальной
lp - указывает на последний элемент списка
pStart - на первый, ее можно и нужно убрать

И вообще лучше комментируй код.

Автор: arhimag 4.01.2007 2:51

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

http://forum.pascal.net.ru/index.php?showtopic=2706

Автор: Bokul 4.01.2007 3:05

Не знаю как стек, но список точно не правильно.. 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.