Основы алгоритмизации и программирования. Часть четвертая. Файловая система Turbo Pascal. Асламова В.С - 17 стр.

UptoLike

33
Рассмотрим типовые алгоритмы обработки типизированного файла
1. Добавить запись S в конец файла f:
reset(f);
seek(f, filesize(f)); {установление указателя за последним элементом
файла}
vv(s); {вызов процедуры ввода записи с клавиатуры}
write(f,s); {запись в файл компонент s}
close(f); {закрытие файла}
Каждое множество данных типизированного файла f состоит из записи
какого-либо типа.
2. Изменить запись s c ключом, равным k в файле f
reset(f);
while (not eof(f)) or (s.key<>k) do
begin
read(f,s); {считывается текущая запись}
if s.key<>k then writeln(запись не найдена);
else begin {указатель уже стоит на следующей записи}
seek (f, filepos(f)-1); {вернуться на запись назад}
writeln(ввод названия города);
readln(s,name);
write(f,s); {изменяем в записи с ключом к название города }
end; {переход к следующей записи файла}
end;
3. Стереть в файле запись с ключом k.
Необходимо файл f без записи с ключом key=k перенести во времен-
ный файл g, связанный с именем T.REC. затем f стереть, а файл g
переименовать, если запись найдена (PR=TRUE).
writeln (вводим имя файла);
readln(name);
assign(f,name);
PR=false;
assign(g, T.REC.);
rewrite(g);
reset(f);
while not eof(f) do begin
read(f,s);
if s.key<>k then write(g,s)
else begin PR:=TRUE; {запись можно высветить на экране и спро-
сить подтверждение для удаления. Если
следует оставить, то записать write(g,s)}
34
end;end;
close(f);
close(g);
if PR then begin erase(f) {стереть f}
rename(g, name); {переименование файла}
end;
else {в файле f нет записи с ключом k }
begin writeln(запись не существует)
erase(g); {уничтожаем копию}
end.
4. Пропуск одного компонента файла
seek (f,filepos(F)+1);
5. Установка указателя на начало
seek(f,0)
Пример:
Сформировать файл следующей структуры: почтовый индекс, название
города, число жителей. Предусмотреть дополнение новых сведений в файл,
изменение названия города, числа жителей. Используя сформированный
файл вывести на печать сведения о городах миллионерах.
uses crt;
type stadt=record
zip,zahl:longint;
name:string[30];
end;
fil=file of stadt;
st=string[15];
var f:fil;b:boolean;nam:st;
procedure vv(var z:stadt); {процедура ввода одной записи}
begin
write(ввод почтового индекса. Для выхода наберите -1);
readln(z.zip);
if z.zip>0 then begin
write(ввод названия города); readln(z.name);
write(ввод числа жителей); readln(z.zahl)
end; end;
procedure sosd(var g:fil;nam:st); {процедура создания файла}
var z:stadt;
      Рассмотрим типовые алгоритмы обработки типизированного файла                 end;end;
                                                                                   close(f);
             1. Добавить запись S в конец файла f:                                 close(g);
reset(f);                                                                          if PR then begin erase(f)     {стереть f}
seek(f, filesize(f));    {установление указателя за последним элементом                 rename(g, name);         {переименование файла}
                         файла}                                                    end;
vv(s);                   {вызов процедуры ввода записи с клавиатуры}               else                          {в файле f нет записи с ключом k }
write(f,s);              {запись в файл компонент s}                               begin writeln(′запись не существует′)
close(f);                {закрытие файла}                                               erase(g);                {уничтожаем копию}
      Каждое множество данных типизированного файла f состоит из записи            end.
какого-либо типа.                                                                         4. Пропуск одного компонента файла
                                                                                      seek (f,filepos(F)+1);
          2.   Изменить запись s c ключом, равным k в файле f
reset(f);                                                                                 5. Установка указателя на начало
while (not eof(f)) or (s.key<>k) do                                                    seek(f,0)
begin
read(f,s);                          {считывается текущая запись}
if s.key<>k then writeln(′запись не найдена′);
else begin                          {указатель уже стоит на следующей записи}
   seek (f, filepos(f)-1);          {вернуться на запись назад}                       Пример:
   writeln(′ввод названия города′);                                                   Сформировать файл следующей структуры: почтовый индекс, название
   readln(s,name);                                                              города, число жителей. Предусмотреть дополнение новых сведений в файл,
   write(f,s);              {изменяем в записи с ключом к название города }
                                                                                изменение названия города, числа жителей. Используя сформированный
end;                                {переход к следующей записи файла}
end;                                                                            файл вывести на печать сведения о городах миллионерах.
                                                                                      uses crt;
             3. Стереть в файле запись с ключом k.                                    type stadt=record
       Необходимо файл f без записи с ключом key=k перенести во времен-               zip,zahl:longint;
ный файл g, связанный с именем T.REC. затем f стереть, а файл g                       name:string[30];
переименовать, если запись найдена (PR=TRUE).                                         end;
                                                                                      fil=file of stadt;
   writeln (′вводим имя файла′);
                                                                                      st=string[15];
   readln(name);
                                                                                      var f:fil;b:boolean;nam:st;
   assign(f,′name′);
                                                                                          procedure vv(var z:stadt);         {процедура ввода одной записи}
   PR=false;
                                                                                              begin
   assign(g, ′T.REC.′);
                                                                                                  write(′ввод почтового индекса. Для выхода наберите -1′);
   rewrite(g);
                                                                                                  readln(z.zip);
   reset(f);
                                                                                                  if z.zip>0 then begin
   while not eof(f) do begin
                                                                                                     write(′ввод названия города′); readln(z.name);
        read(f,s);
        if s.key<>k then write(g,s)                                                                  write(′ввод числа жителей′); readln(z.zahl)
        else begin PR:=TRUE; {запись можно высветить на экране и спро-                            end; end;
                                  сить подтверждение для удаления. Если                   procedure sosd(var g:fil;nam:st); {процедура создания файла}
                                  следует оставить, то записать write(g,s)}                   var z:stadt;
                                       33                                                                            34