Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Розглянуті раніше підпрограми дозволяють перезаписувати або доповнювати елементи у файл. Якщо потрібно навпаки вилучити частину записів

Поиск

TRUNCATE(<файлова змінна>);

Ця процедура відсікає хвостову частину від позиції файлового вказівника, тобто вилучаються елементи вкінці файлу.

Якщо потрібно вилучити деякі записи всередині або на початку файлу, то приходиться писати власні підпрограми для виконання цих дій.

Для вилучення т елементів, починаючи з позиції п, потрібно послідовно перемістити всі елементи, починаючи з позиції п+т до кінця файлу вперед на т позицій процедурою truncate відсікти хвіст із т елементів.

Наприклад

For i:=1 to m do

Begin

Seek (f, n+m+i-1);

Read(f,x);

Seek(f, n+i-1);

Write(f,x)

End;

Truncate(f);

Як видно з програми, вилучення елементів з файлу вимагає значних об’ємів перезапису даних. Вилучення одного першого елемента вимагає переміщення 999 елементів на одну позицію. Якщо вилучення є однократною дією, то такий підхід економічно оправданий. Якщо ж вилучається багато елементів і не один раз і, крім того розмір типу елементів є великим, то програма буде працювати дуже довго. В таких випадках, крім основного файла даних використовується ще один так званий індексований файл. Елементами цього файлу переважно є цілі числа від 0. ці числа є порядкові номери записів в основному файлі.

Вилучення деякого елементу даних в цьому випадку не вимагає відразу перезапису даних, достатньо в індексному файлі замість номера записати якесь від’ємне число. Після завершення роботи з всією базою, вкінці на основі індексного файлу потрібно перезаписати основний файл даних.

Спеціальні підпрограми для роботи із текстовими файлами

Текстові файли на диску нічим не відрізняються від інших файлів. Всі дискові файли

Типізація файлів передбачає накладання певного шаблону на ланцюжки байтів. Цей шаблон визначається типом файлів.

Текстові файли – це послідовність елементів, але, на відмінну від типізованого файлу file of char, в текстових файлах деякі елементи мають своє спеціальне призначення. Це спеціальні комбінації символів #13 #10, які утворюють ознаку кінця рядка. Ця ознака займає 2 байти, але не є текстовою інформацією.

Файлові змінні, які представляють текстові файли у програмі оголошуються службовим словом text. Як і всі інші файли вони повинні бути зв’язані

Наприклад

Assign(f, ‘text.txt’);

Як і типізовані текстові файли відкриваються для читання і запису.

Зауваження На відмінну від типізованих reset(f) відкриває лише для читання, rewrite(f) – тільки для запису.

1. Процедурачитання з текстовогофайлу

READ(<файлова змінна>,<список параметрів>);

READLN(<файлова змінна>,<список параметрів>);

Якщо файлова змінна явно відсутня при процедурі, то читання здійснюється із стандартного текстового файлу пристрою вводу.

В якості списка параметрів можуть бути індентифікатори змінних цілого типу, дійсного типу, символьного типу, логічного, рядкового.

Процедура read читає дані із текстового файлу і не переміщує файловий вказівник на новий рядок, якщо не досягнута ознака eof.

Readln читає і в будь-якому випадку переміщує файловий вказівник на новий рядок.

Якщо текстовий файл відокремлених один від одного хоча б одним пропуском або табуляцією, то ці дані можна читати не як символьну інформацію, а як величини певного типу. Якщо ж параметрами вводу є рядкові змінні, то всі дані з файла читаються як рядки.

2. Процедуразапису

Для запису у текстовий файл використовуються процедури

WRITE(<файлова змінна>,<список параметрів>);

WRITELN(<файлова змінна>,<список параметрів>);

Якщо перший параметр, файлова змінна відсутня, запис здійснюється у стандартний

В якості параметрів можуть бути змінні стандартних скалярних типів або рядкового типу величини

Якщо параметри є стандартних типів, то вони записуються в текстовому форматі послідовно з можливим форматом запису.

Процедура write здійснює запис у файл без введення ознаки кінця рядка., а процедура writeln після запису всіх параметрів допускає ознаку eof, тобто

3. Функціяознакикінцярядка

Повертає значення true, якщо файловий вказівник знаходиться в кінці рядка.

4. Функціяпереміщення в кінецьрядка

SEEKEOLN(<файлова змінна>);

Якщо файловий вказівник знаходиться не в кінці файла і йому передують довільна кількість пропусків або табуляції, то функція переміщує файловий вказівник в кінець рядка і повертає значення true.

Якщо ж вказівнику передує хоча б один символ відмінний від пропусків чи табуляції, то результат функції false.

5. Функціяпереміщення в кінецьфайлу

Як і seekeoln ігнорує всі пропуски та табуляції, а також ознаки eoln з пустими рядками і переміщує файловий вказівник в кінець файлу, при цьому результат true. Якщо ж вказівнику передує хоча б один символ

Процедура, що відкриває текстовий файл для дозапису

Для доповнення текстового файлу використовують режим до запису.

APPEND(<файлова змінна>);

При її виконанні файловий вказівник поміщається вкінець файлу. До запис можливий лише в кінці. Перемістити файловий вказівник на початок файлу неможливо.

Файлова змінна повинна бути зв’язана з конкретним файлом на диску.

Безтиповіфайли

При цьому файл вважається послідовністю байтів без умовного розділення на рядки символами eoln (як в текстових файлах) або на елементи деякого типу як у типізованих файлах.

Такі файли переважно застосовуються для швидкого перенесення даних з одного файла в інший без інтерпретації їх певним типом. Це може бути звичайне копіювання одного досить великого файла в інший. Для без типових файлів файлові змінні оголошуються при допомозі службового слова file.

Процедури reset та rewrite можуть мати певну відмінність. Це пов’язано з тим, що читання і запис у без типових файлах здійснюється блоками байтів певного розміру. Розмір блока задається в якості другого параметру процедур reset та rewrite відповідно:

При читанні даних із файлу вони поміщаються у спеціальну ділянку, яка визначається деякою змінною достатньо великою розміру.

За одну операцію читання-запису можна зчитати, записати декілька блоків.

Розмір цієї змінної, де зберігатимуться прочитанні дані, повинен бути достатнім для розміщення всіх блоків. Найчастіше таку змінну оголошують як деяку кількість байтів символів

Можна прочитати до 19 блоків. Для читання (запису) використовуються свої процедури

Процедура block read здійснює читання з без типового файлу деякої кількості блоків заданого розміру і поміщає їх у змінну buffer.

Кількість блоків, що читається задається

N – повертає реальну кількість прочитаних блоків.

BLOCK WRITE (VAR: FILE; VAR BUFFER;: LONGINT; VAR: LONGINT);

Записує у безтиповий представлений файловою змінною задану кількість k –блоків визначеного розміру із змінної buffer. Реальну кількість записуваних блоків повертає N.

Наприклад

Скопіювати дані з одного файлу в інший.

Var

f1, f2: file;

buffer: array[1..1000] of byte;

k, n: integer;

begin

assign(f1, ‘file1.dat’);

assign(f2, ‘file2.dat’);

reset(f1,100);

rewrite(f2,10);

while not eof (f1) do

begin

blockread (f1, buffer, 1, k);

blockwrite (f2, buffer, 10, n);

end;

close (f1); close(f2);

end.

Використання без типових файлів дозволяє виконувати ряд дій, пов’язаних з командними операційної системи.

Окремі ОС команди реалізуються простими викликами стандартних процедур.

З програми можна перейменовувати файли, копіювання, виділення.

1. Процедура для перейменування файлів

RENAME (VAR;);

2. Процедуравидаленняфайлу

ERASE();

ІІ- семестр

ТЕМА: Вказівники.

Розглянуті раніше типи даних являли собою значення певного типу, які знаходилися в межах деякого діапазону і володіли певними спільними властивостями. В Pascal, крім даних інформаційного характеру (цифри, рядки), є особливий тип даних, що є адресами у пам'яті деякий комірок. Адресу теж можна вважати інформацією, але вона має подвійний зміст: інформація місця розміщення іншої інформації.

Доступ до будь-якого елемента даних легко реалізується через ідентифікатор змінної, проте до цього ж можна отримати доступ, вказавши адресу пам'яті, де розміщується відповідна змінна: звернутися до людини можна за її іменем-ідентифікатором або вказавши місце знаходження її.



Поделиться:


Последнее изменение этой страницы: 2016-09-19; просмотров: 301; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.154.251 (0.009 с.)