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

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

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

Автор: iSlayter 9.04.2007 0:50

Всем добрый вечер.

Возможно невнимательно искал на форуме - но про удаление Record из файла ничего не нашел.
Возможно есть в паскаля какая-либо функция, схожая unset() в php?
Задание - удалить Record из файла по её номеру. Подскажите и\или покажите что и где прочитать.

С уважением,
Юрий

Автор: volvo 9.04.2007 0:58

Цитата
Возможно невнимательно искал на форуме
Скорее всего... Недавно было:
http://forum.pascal.net.ru/index.php?s=&showtopic=16342&view=findpost&p=95845

Автор: iSlayter 9.04.2007 1:05

Прошу прощения за глупый вопрос, но что значит pred(filesize(f))?

Автор: klem4 9.04.2007 1:06

Цитата
pred(filesize(f))?


Возвращает значение на единицу меньшее чем количество записей в типизированном файле f.

Автор: iSlayter 9.04.2007 2:12

Извините за мою наглость, не сумел разобраться, что в том коде значит переменная X и откуда она вообще берется.
Мне необходимо написать процедуру удаления записи типа record из файла, по её номеру.

program swimmers;
uses crt;
const
n = 2;
type

TRec = record
name : string [31];
number : integer;
time : real;
part : integer;
end;

TBase = array [1..n] of TRec;

TFile = file of TBase;
procedure Delete(var b : TBase; var f : TFile; var x : integer);
{dopolnit'}
begin
end;
procedure ShowInfo(var b : TBase; var f : TFile; var x : integer);
begin
with b[x] do begin
writeln('Sportsmen N ',x);
writeln('Name : ' , name);
writeln('Start number : ' , number);
writeln('Time : ' , time:6:3);
end;
end;
procedure ShowTop (var b : TBase; var f : TFile);
var
i,maxi,mini : integer;
max, min : real;
begin
min := b[1].time;
max := b[1].time;
for i := 0 to 2 do
with b[i] do begin
if time <= min then
mini := i;
end;
for i := 0 to 2 do
with b[i] do begin
if time >= max then
maxi := i;
end;
writeln ('Sportsmen zanyavshyi pervoe mesto: ', b[mini].name , ' vremya ' , b[mini].time:6:3 ,'');
writeln ('Sportsmen zanyavshyi poslednee mesto: ', b[maxi].name , ' vremya ' , b[maxi].time:6:3 ,'');
end;
procedure CheckPart(var b : TBase; var f : TFile; var x : integer);
begin
with b[x] do begin
if time <> 0 then
writeln('sportsmen uchastvoval v sorevnovaniyah!')
else
writeln('sportsmen ne uchastvoval v sorevnovaniyah')
end;
end;

procedure Input(var b : TBase; var f : TFile);
var
i,j : byte;
begin
writeln('Vvod bazy dannyx. ');
for i := 1 to n do
with b[i] do begin
time := 0;
writeln('Sportsmen N ',i);
write('Name : '); readln(name);
write('Start number : '); readln(number);
write('Time (if blank doesnt take part in the competitions) : '); readln(time);
if time = 0 then part := 0 else part := 1;
writeln;
end;
write(f, b);
end;

procedure Print(var b : TBase; var f : TFile);
var
i,j : byte;
begin
read(f, b);
writeln('information about students : ');
for i := 1 to n do
with b[i] do begin
writeln('Sportsmen N ',i);
writeln('Name : ' , name);
writeln('Start number : ' , number);
writeln('Time : ' , time:6:3);
if part = 1 then writeln('This sportsmen take part in competitions.')
else writeln('Doesnt take part in compet.');
writeln;
end;
end;

var
base : TBase;
baseFile : TFile;
sportsmenNumber : integer;
temp : integer;
begin
CLRSCR;
assign(baseFile, 'c:\students.db');
rewrite(baseFile);
Input(base, baseFile);
writeLn('Press any key ...'); ReadKey; CLRSCR;
reset(baseFile);
Print(base, baseFile);
writeln('Proverit u4astvoval li sportsmen v sorevnovaniyah? 1 - yes, 0 - no');
readln(temp);
if temp = 1 then begin
write('Vvedite nomer sportsmena : ');
readln(sportsmenNumber);
CheckPart(base, baseFile, sportsmenNumber)
end;
temp := 0;
writeln('Vyvesti li eshe raz informaciu o kakom-libo sportsmene? 1 - yes, 0 - no');
readln(temp);
if temp = 1 then begin
write('Vvedite nomer sportsmena : ');
readLn(sportsmenNumber);
ShowInfo(base, baseFile, sportsmenNumber)
end;
temp := 0;
writeln('Vy hotite udalit kakuu libo zapis?');
readln(temp);
if temp = 1 then begin
write('Vvedite nomer sportsmena: ');
readln(sportsmenNumber);
Delete(base, baseFile, sportsmenNumber);
end;
close(baseFile);

ShowTop(base, baseFile);
writeln('');
writeln('Press any button for exit ...');
ReadKey
end.

Автор: Tan 9.04.2007 3:06

это параметр через который отсылается переменная из главной программы в подпрограмму, её можно назвать как хочешь (практически), за исключением зарезервированных языком обозначений smile.gif