русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

П Р И М Е Р Ы О Б Р А Б О Т К И Ф А Й Л О В


Дата добавления: 2014-11-27; просмотров: 512; Нарушение авторских прав


 

В рассматриваемых ниже примерах при обработке файлов массивы не используются, поскольку размер файла в общем случае может превышать максимально возможный размер переменной, равный 64 Кбайт.

 

Пример 1.

Компонентами типизированного файла являются вещественные числа. Удалить из состава файла максимальный элемент.

 

Ниже приведено два варианта решения поставленной задачи.

В программе DelFile1 вначале производится поиск номера kmax максимального компонента файла, после чего все компоненты, расположенные правее kmax, сдвигаются на один шаг влево. Поскольку размер файла при удалении компонента должен сократиться, то файл "обрезается" по последнему компоненту с помощью процедуры Truncate.

 

Program DelFile1;

TypeFileReal = file of real;

Var kmax : longint; { номер максимального компонента }

R, { значение текущего компонента }

Rmax : real; { значение максимального компонента }

F : FileReal;

Begin

Assign(F,'F.dat'); Reset(F);

If FileSize(F)<2 then

Rewrite(F)

Else

Begin

Read(F,Rmax); kmax:=0;

While noteof(F) do{ Определение местоположе- }

Begin{ ния максимального компо- }

Read(F,R); { нента файла }

If R>Rmax then

Begin

Rmax:=R; kmax:=FilePos(F)-1;

End;

End;

Ifkmax<FileSize(F)-1 then

Begin

Seek(F,kmax+1);

WhileFilePos(F)<FileSize(F) do

Begin{ Сдвиг компонентов файла,}

Read(F,R); { начиная с номера kmax+1,}

Seek(F,FilePos(F)-2); { на один компонент }

Write(F,R); { влево (при этом }

Seek(F,FilePos(F)+1); { элемент с номером kmax }

End;{ будет уничтожен) }

End;

Seek(F,FileSize(F)-1); { Удаление последнего ком- }

Truncate(F); { понента файла }

End;

Close(F);

End.

 

В программе DelFile1 учитывается, что после выполнения процедуры Read указатель файла перемещается на следующий компонент, поэтому переменной kmax присваивается значение FilePos(F)-1.



При анализе программы DelFile1 следует иметь в виду, что функция FileSize(F) определяет количество компонентов в файле F, при этом номером последнего компонента является значение FileSize(F)-1; в процедуре Seek(F,k) параметр k - это номер компонента, на который устанавливается указатель файла F.

В программе DelFile2 в файл F2 переписываются из файла F1 все компоненты, кроме максимального. После этого файл F1 уничтожается, а файл F2 переименовывается, получая имя, которое первоначально имел файл F1.

 

Program DelFile2;

Type FileReal = file of real;

Var kmax : longint; { номер максимального компонента }

R, { значение текущего компонента }

Rmax : real; { значение максимального компонента }

F1,F2 : FileReal;

Begin

Assign(F1,'F1.dat'); Reset(F1);

If FileSize(F1)<2 then

Begin

Rewrite(F1); Close(F1)

End

Else

Begin

Assign(F2,'F2.dat'); Rewrite(F2);

Read(F,Rmax); kmax:=0;

While not eof(F1) do

Begin

Read(F1,R);

IfR>Rmax then

Begin

Rmax:=R; kmax:=FilePos(F)-1;

End;

End;

Seek(F1,0);

Fork:=0 tokmax-1 do{ 1 }

Begin

Read(F1,R); Write(F2,R);

End;

Seek(F1,kmax+1);

While not eof(F1) do{ 2 }

Begin

Read(F1,R); Write(F2,R);

End;

Close(F1); Close(F2);

Erase(F1); Rename(F2,'F1.dat');

End;

End.

Если максимальный компонент расположен в начале файла, то цикл 1 работать не будет; если этот компонент является последним в файле, то не будет отрабатываться цикл 2.

 

Структура программы DelFile2 более предпочтительна, по крайней мере в смысле читабельности.

 

Пример 2. Перед k-ым компонентом типизированного файла ( ) вставить новое значение b.

Здесь, как и в примере 1, могут быть два варианта решения:

- с помощью процедуры Seek сдвинуть компоненты k, k+1, k+2, … вправо на одну позицию (начиная с последнего компонента), после чего записать в k-ый компонент новое значение b;

- в буферный файл F2 переписать из файла F1 компоненты 0, 1, …, k-1, затем новое значение b и все остальные компоненты файла F1; после этого уничтожить файл F1 и переименовать файл F2.

Конкретно программную реализацию примера 2 предлагается выполнить самостоятельно.

 

Пример 3.

В текстовых файлах F1 и F2 содержатся целые числа, упорядоченные по возрастанию. Объединить в файле F3 содержимое файлов F1 и F2, сохранив их упорядоченность. Сортировку данных не производить. Учесть, что в частном случае файлы F1 и F2 могут быть пустыми.

 

Program ComFiles;

Label10;

Vark1,k2 : integer;

Cond : boolean;

F1,F2,F3 : text;

Begin

Assign(F1,'F1.dat'); Reset(F1);

Assign(F2,'F2.dat'); Reset(F2);

Assign(F3,'F3.dat'); Rewrite(F3);

IfSeekEof(F1) or SeekEof(F2) then

Goto 10;

Read(F1,k1); Read(F2,k2); { Чтение первого компонента }

Cond:=true;

While Cond do{ Цикл выполняется до тех пор, пока }

If k1>k2 then { не будет исчерпан файл F1 или F2 }

Begin

Writeln(F3,k2);

If SeekEof(F2) then { При каждом выполнении цикла }

Begin{ из двух сравниваемых чисел }

Cond:=false; { k1 и k2 в файл F3 записывает-}

Writeln(F3,k1) { ся меньшее, после чего пере- }

End{ сланное число заменяется но- }

Else { вым значением из соответству-}

Read(F2,k2); { ющего файла }

End

Else

Begin

Writeln(F3,k1);

IfSeekEof(F1) then

Begin

Writeln(F3,k2); Cond:=false

End

Else

Read(F1,k1);

End;

10:

While not SeekEof(F1) do{ В F3 переписывается ос-}

Begin{ таток из файла F1 или }

Read(F1,k1); Writeln(F3,k1) { из файла F2. Если один }

End; { из исходных файлов пус-}

While not SeekEof(F2) do{ той, в F3 полностью пе-}

Begin { реписывается другой }

Read(F2,k2); Writeln(F3,k2){ файл. Если F1 и F2 пус-}

End; { тые, F3 также остается }

Close(F1); Close(F2); Close(F3);{ пустым. }

End.

 

 



<== предыдущая лекция | следующая лекция ==>
Т И П И З И Р О В А Н Н Ы Е Ф А Й Л Ы | А Д Р Е С А Ц И Я П А М Я Т И


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.005 сек.