Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Pascal.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
3.44 Mб
Скачать

1 Текстові файли

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

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

reset(F_Isx); {відкриває файл для читання і встановлює його покажчик

на першу компоненту}

for i:=1 to 4 do

read(F_Isx,x);

reset(F_Isx); {встановлює заново покажчик на першу компоненту файлу}

У змінній х залишиться лише остання, четверта, прочитана компонента файлу.

При створенні текстового файлу (тільки текстового файлу) в турбосередовищі в кінці кожного рядка слід натискати клавішу Enter, цю ж клавішу необхідно натиснути і в кінці файлу. В цьому випадку в кінці кожного рядка генерується спеціальна ознака або код кінця рядка – EOLN (end of line), а в кінці файлу – EOF (end of file) – код кінця файлу. Ці коди можна помістити у файл також за допомогою набору символів #10#13 (EOLN) і одночасним натисненням клавіш Ctrl+Z (EOF).

2 Типізовані файли. Мітки

Компонентами таких файлів можуть бути як прості (integer, longlnt, real тощо), так і структуровані типи даних (масиви, записи тощо). Розмір буфера для типізованих файлів встановлюється автоматично на основі розміру його компонентів. Нумерація компонентів файлу починається не з одиниці, як в текстових файлах, а з нуля. Прямий доступ до компонентів типізованого файлу забезпечується процедурою seek (to seek – шукати):

seek(«ФЗ»,«№ компоненти»);

Тут «№ компоненти» – константа типу longint, вона вказує номер компоненти. Ця процедура зміщує вказівник файлу до потрібної компоненти, її не можна застосовувати до текстових файлів.

Функція filesize(«ФЗ»):longint повертає число компонентів файлу. Виклик процедури seek(«ФЗ»,filesize(«ФЗ»)) розміщує вказівник в кінці файлу – після останньої його компоненти. Це виявляється можливим внаслідок того, що нумерація компонентів типізованих файлів починається з нуля, тому функція filesize(«ФЗ») повертає номер компоненти, що стоїть за останньою компонентою файлу.

Процедура truncate («ФЗ») видаляє частину файлу, починаючи з поточної позиції до його кінця.

Для типізованих і нетипізованих файлів обидві процедури reset і rewrie дозволяють здійснювати як зчитування з файлу, так і запис у файл. Такий режим цих процедур встановлюється за замовчуванням, він дозволяє легко оновлювати раніше створені файли і за необхідністю розширювати їх. В цьому випадку значення змінної FileMode модуля System=2. Якщо FileMode=1, то для цих процедур забезпечується режим «тільки запис», а якщо FileMode=0 – режим «тільки зчитування» Змінити режим можна присвоюванням потрібного значення змінній FileMode перед відкриттям файлу. Після цього процедури reset і rewrite відкриватимуть файли в заданому режимі. Проте слід мати на увазі, що керувати режимом процедури rewrite у такий спосіб можна тільки для вже існуючих файлів. Для новостворюваних файлів процедура rewrite завжди включає режим «зчитування/запис» (FileMode=2).

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

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

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

tурe

Mas=array[l..100,1..20] of real;

var

x, у:Mas;

F_lsx, F_Rez:file of Mas;

begin

... {відкриття файлів F_Isx і F_Rez...}

read(F_Isx, x); {зчитується відразу весь масив}

... {обробка масиву}

write(F_Rez, у); {записується відразу весь масив}

... {...закриття масивів F_Isx і F_Rez}

end.

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

Мітки звичайно оголошуються (описуються) зразу ж після директиви компілятора uses з використанням зарезервованого слова label, їх імена можуть бути правильними ідентифікаторами або ж складатися тільки з цифр діапазону 0...9999:

label

Mitka_1, Мstка_2 {імена цих міток – правильні ідентифікатори}

1999, 2000; {для міток такі імена також дозволені}

Основне призначення мітки полягає в тому, щоб перемістити виконання програми з одного її місця в інше – те, де стоїть мітка. При цьому таке перенесення можна здійснити як вперед, так і назад. Після мітки необхідно ставити двокрапку. Двокрапка розділяє мітку і оператор, який слідує за нею. Повернення обчислень в місце, позначене міткою, забезпечується оператором безумовного переходу goto (перейти). Мітки, описані в підпрограмах, є локальними, тому посилатися на них ззовні підпрограми неможливо. Приклад застосування міток в тілі програми:

Mitka_l:

writln('2011 рік');

writln('2012 рік');

goto Mitka_l;

У цьому фрагменті здійснений «вічний» цикл виведення двох повідомлень: після першого виведення 2012 рік виконання програми знов буде повернене на виконання процедури, що стоїть після мітки Mіtka_1, – знов будуть виведені обидва повідомлення, потім все повторюватиметься в цій же послідовності знову і знову.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]