Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Функції. Eof(Var f:filevar):Boolean - має значення True, якщо вказівник файла міститься на мітці кінця файла





Eof(Var f:filevar):Boolean - має значення True, якщо вказівник файла міститься на мітці кінця файла, і False - у противному разі.

FilePos(Var f:filevar):Integer - визначає номер елемента, в якому міститься вказівник файла.

FileSize(Var f:filevar):Integer- визначає кількість елементів у файлі.

Усі три функції повинні застосовуватись до відкритих файлів.

Контроль операцій введення-виведення. Спосіб контролю правильності операцій введення-виведення залежить від стану директиви контролю цих операцій. Директива має вигляд: {$І+} або {$І-}. За замовчуванням директива перебуває в активному стані {$І+}. У цьому режимі, якщо виникне помилка введення-виведення, робота програми переривається і користувач отримує повідомлення про номер та місцезнаходження помилки. Такий спосіб контролю незручний, бо може призвести до втрати даних.

Якщо директива {$І} перебуває в пасивному стані {$І-}, то за умови виникнення помилки введення-виведення виконання програми не припиняється, але наступні операції введення-виведення затримуються. Стан затримування зберігається доти, доки не буде викликана цілочислова функція IOResult. Ця функція повертає значення 0, якщо попередні операції введення-виведення були коректними, і деяке ненульове значення, якщо виявлені помилки. Після звертання до цієї функції значення її обнуляється. Хоча ця функція лише фіксує наявність чи відсутність помилок, контролюючи кожну операцію введення-виведення шляхом переведення директиви {$І} в пасивний стан тільки на момент виконання цієї операції, можна ідентифікувати причину виникнення помилки і передбачити програмні засоби для її усунення без переривання роботи програми і зі збереженням даних.

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

Program demo_control_IO;

Var s: string [14];

b: Boolean;

f: File;

begin

ClrScr; GotoXY(30,5); Write( ' iм'я файла: ');b:=False;

Repeat

GotoXY(45,5);Read(s);Assign(f,s);

{$І-} Reset(f); {$І+}

If IOResult=0 then b:=True

else

begin

GotoXY(30,7);Write( 'Такий файл не знайдено' );

GotoXY(42,5);Write('');

end

until b;

GotoXY(35,9);Write(FileSize(f));Close(f)

end.

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

Var f: Text.

Оскільки текстові файли не мають регулярної структури, то до них не можна застосовувати стандартні підпрограми FilePos, FileSize і Seek. Забороняється також одночасно читати і писати в один і той самий текстовий файл.

Процедури. Стандартні процедури Assign, Close, Reset, Rewrite мають ту саму дію. Процедури Read і Write модифіковані.

Read(Var f:Text;Var a1,…,an:anytype)- зчитує з файла f значення і присвоює їх змінним із списку. Тип anytype може бути символьним, рядковим, цілим або дійсним. Дія і результат процедури Read залежать від типу величин, що зчитуються. Для параметра-змінної символьного типу з файла буде зчитано символ і присвоєно відповідній змінній. Якщо до виконання процедури Read функція Eof набула значення Тruе, то символьній змінній буде присвоєно символ Chr($1А) (символ ^Z - кінець файла), а якщо функція Eoln набула значення Тruе (в той-же час функція Eof набула значення False) то змінній буде присвоєно значення Сhr($OD) і (символ Сr - повернення каретки).

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

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

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

-149 5К4 і процедури зчитування мають вигляд

read(f,a);Read(f,b);

(а і b - цілочислові змінні), то змінній а буде присвоєно значення -149, а під час спроби зчитати значення змінної b фіксується помилка введення-виведення (' 5К4 ' не є цілочисловою константою).

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

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

1965.0503_ _-1.607Е+04

2.1А-05

і процедури зчитування мають вигляд

Read(f,a,b);Read(f,c);

(a,b і с -змінні дійсного типу), то змінній а буде присвоєно значення 1.9650503Е+03, змінній b - значення -7.607Е+04, а під час спроби зчитати значення змінної с фіксується помилка введення-виведення (послідовність '2.1А-05' не є дійсною константою).

Якщо в двох останніх випадках (під час зчитування величин числового типу) функція Еоf мала значення Тruе перед виконанням процедури Read або функція Еоln набула значення Тruе під час пропуску початкових пропусків, знаків табуляції чи міток кінця рядка, то змінній, що зчитується, не присвоюється ніяке значення.

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

Readln(Var f:Text; Var a1,…,an:anytype)- процедура, аналогічна процедурі Read, проте з тією відміною, що наступний оператор зчитування виконуватиметься з початку нового рядка, а символи, залишені в попередньому рядку, ігноруються. Виклик процедури Readln без списку параметрів-змінних приводить просто до переміщення вказівника файла на початок наступного рядка. Таким чином оператор Readln(f,a,b) аналогічний складеному оператору;

begin Read(f,a);Read(f,b);Readln(f) end;.

Write(Var f:Text; Var a1,…,an:anytype)- записує у файл, який визначає f, одне або більше значень із списку змінних. Тип anytype може бути символьним, рядковим, цілим, логічним або дійсним. У процедурі Write допускається форматоване виведення, аналогічно форматованому виведенню на екран. В даному випадку вільні знакомісця записуються у файл як пропуски.

Writeln(Var f:Text; Var a1,…,an:anytype)- процедура, аналогічна процедурі Write, але на відміну від неї після закінчення запису значень змінних із списку у файл записується мітка кінця рядка і наступний оператор виведення здійснюватиме запис даних з нового рядка. Виклик процедури Writeln без списку параметрів-змінних приводить до запису в файл порожнього рядка.

Слід зазначити, що стандартні файли системою Turbo Pascal інтерпретуються як текстові і до них можна застосовувати процедури Readln і Writeln з тим самим змістом.

Наприклад, процедури Readln(Con) або Readln чекають натискування клавіші введення, процедура Writeln(Lst) виводить на друкуючий пристрій порожній рядок.

Date: 2015-12-12; view: 320; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.005 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию