Помощь - Поиск - Пользователи - Календарь
Полная версия: Удаление Record из файла
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
iSlayter
Всем добрый вечер.

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

С уважением,
Юрий
volvo
Цитата
Возможно невнимательно искал на форуме
Скорее всего... Недавно было:
Record
iSlayter
Прошу прощения за глупый вопрос, но что значит pred(filesize(f))?
klem4
Цитата
pred(filesize(f))?


Возвращает значение на единицу меньшее чем количество записей в типизированном файле f.
iSlayter
Извините за мою наглость, не сумел разобраться, что в том коде значит переменная 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
это параметр через который отсылается переменная из главной программы в подпрограмму, её можно назвать как хочешь (практически), за исключением зарезервированных языком обозначений smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.