Помощь - Поиск - Пользователи - Календарь
Полная версия: не понятная ошибка при чтении из файла элементы поля типа ЗАПИСЬ.
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Andrewshkovskii
спасибо!
появилась ешё 1 проблема...(сколькож можно..)

Читаем последний пост
мисс_граффити
не в файле дело.
смотри:
Tabl = array [1..10] of Card;
Scard:Tabl;


 i:=0;
while not eof(f) do {есле этот цикл заменить на цикл for,то все прекрасно выводиться,но надо указывать N самостоятельно} //ты ведь в цикле for делаешь i:=1 to n, а не i:=0 to n, правда?...
begin
read(f,Scard[i]);//чему i равно при первом проходе? 0, правильно? и куда ты считываешь?
i:=i+1;
end;
Andrewshkovskii
спасибо.
Посмотри ,пожалуйста,ешё первый пост,я исправил ,и добавил новый вопрос..=/
мисс_граффити
не надо было исправлять - лучше бы отдельно написал.
 if q=1 then
begin <-----!вот
writeln('Vvedite familiu');
repeat
readln(Fam);
if (Length(Fam) >14 ) or (Length(Fam) <1) then
begin
writeln('Maks. dlina familii 14.Min. 1!');
writeln('Povtorite Vvod!');
end;
until (Length(Fam) in [1..24]);
{...ввод...}
end; <----! от добавленного begin
Andrewshkovskii
спасибо!помогло!=)

Теперь ешё одна проблема

После удаления элемента из массива записей,и последующей записи данных в файл,программа перестает читать файл,и выдает ошибку Disk read error..
В чем проблема?

Вот процедура удаления,сохранения,и загрузки файла.

Procedure FileRead;
var
X:byte;
Path:string;
begin
repeat
Writeln('Vvedite pyt k faily');
readln(path);
assign(f,path);
{$I-}
reset(f);
x:=IORESULT;
{$I+}
if x<>0 then
writeln('Oshibka! Ne verno ykazan pyt!');
until (x=0);
path:='n';
assign(f2,path);
reset(f2);
read(f2,n);
close(F2);
for i:=1 to n do
begin
read(f,Scard[i]); {<<-- вот здесь ошибка выскакивает}
end;
close(f);
end;



Procedure FileSave;
var
x:byte;
path:string;
begin
repeat
Writeln('Vvedite imya faila i pyt');
readln(path);
assign(f,path);
{$I-}
rewrite(f);
x:=IORESULT;
{$I+}
if x<>0 then
writeln('Oshibka! Ne verno ykazano imya i pyt!');
until (x=0);
for i:=1 to n do
write(f,Scard[i]);
close(f);
end;


procedure DeleteT( var Scard:tabl);
var
q,w,e,r,t:byte;
begin
Writeln('Vvedite nomer stydenta,kotorogo hotite ydalit iz tablici');
repeat
readln(q);
if (q<1) or (q>n) then
writeln('Vi neverno vveli nomer stydenta!Povtoite Vvod!');
until(q in [1..n]);
for i:=q to n do
begin
Scard[i].Sname:=Scard[i+1].Sname;
Scard[i].Vball:=Scard[i+1].Vball;
for j:=1 to 4 do
Scard[i].Ekz[j]:=Scard[i+1].Ekz[j];
For k:=1 to 3 do
Scard[i].Zach[k]:=Scard[i+1].Zach[k];
end;
n:=n-1;
Output(Scard);
ENd;


и навсякий случай,процедура вывода на экран информации :
 procedure OutPut(var Scard:tabl);
begin
Writeln ('Vivod informacii');
DrawTablHead;
for i:=1 to n do
begin
write('і # ',i);
write('і',Scard[i].Sname);
DlinaF(Scard[i].Sname);
for j:=1 to h do
write(' ');
write('і');
if (Scard[i].Vball)>9 then
write(' ',Scard[i].VBall,' і')
else
write(' ',Scard[i].VBall,' і');
write(Scard[i].Ekz[1],' і');
write(Scard[i].Ekz[2],' і');
write(Scard[i].Ekz[3],' і');
write(Scard[i].Ekz[4],' і');
write(Scard[i].Zach[1],' і');
write(Scard[i].Zach[2],' і');
write(Scard[i].Zach[3],' і');
writeln;
end;
drawtabllegs;
end;
мисс_граффити
хмм...
вот здесь ты n изменяешь:
 procedure DeleteT( var Scard:tabl);
...
n:=n-1;

а изменяется ли оно в файле 'n'?
Andrewshkovskii
хм..ты правда..чертова невнимательность=/спасибо огромное!=)
+1 Вам,Юлия!=)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.