Помощь - Поиск - Пользователи - Календарь
Полная версия: чтение из файла
Форум «Всё о Паскале» > 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.‘(r)§¤ вм д (c)« Ё бЇЁб(r)Є',
                                 '2.Џа(r)зЁв вм д (c)« Ё§ бЇЁб(r)Є ',
                                 '3.‚лў(r)¤ бЇЁбЄ  ­  нЄа ­',
                                 '4.‚ле(r)¤');

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('‚ў(r)¤ЁвҐ бЇЁб(r)Є:':25);
            write('” ¬Ё«Ёп: ');
            readln(Title);
            write('€¬п: ');
            readln(Nm);
            write('ЋвзҐбвў(r): ');
            readln(Pt);
            write('„ в  а(r)¦¤Ґ­Ёп: ');
            readln(data);
            write('Џ(r)«: ');
            readln(pol);
            write('ЊҐбв(r) а Ў(r)вл: ');
            readln(mesto);
            write('„(r)¬ и­Ё(c)  ¤аҐб: ');
            readln(adres);
        end;
        write(f,li);
        writeln('…бвм ҐйҐ бўҐ¤Ґ­Ёп ¤«п бЇЁбЄ ?');
        readln(k);
   until k='n';
  close(f);
  writeln('„ ­­лҐ б(r)еа ­Ґ­л. Ќ ¦¬ЁвҐ «оЎго Є« ўЁиг.');
  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('‘ЇЁб(r)Є  Ў(r)­Ґ­в(r)ў Ё¬ҐойЁебп ў д (c)«Ґ');
  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('„(r)«¦Ґ­ д(r)а¬Ёа(r)ў вмбп бЇЁб(r)Є');
        SaveBase_in_file;
       end;
     2:begin clrscr;
       {if pStart=nil then begin  }
         writeln('Џа(r)зЁв (c)⥠¤ ­­лҐ Ё§ д (c)« ');
         List_creat;
         readln; end;
     3:begin clrscr;
        List_displ;
        readln;
       end;
     4:begin clrscr;
        writeln('‚л е(r)вЁвҐ г­Ёзв(r)¦Ёвм бЇЁб(r)Є - y or n?':36);
        readln(ch);
        if ch='y' then DeleteList;
        halt;
       end;
  end;
 end;
end.

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