![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Тема:
Файли з типом
Мета:
Уміти скласти програму з використанням файлів послідовного та прямого доступу
11.1. Теоретичні відомості
З точки зору PASCAL-системи – це структурований тип даних, який складається з послідовності компонент одного типу і однакових розмірів. Доступ до конкретної компоненти ведеться через поточний вказівник файла. При записі (читанні) цей вказівник автоматично переміщується до наступної компоненти. Оскільки всі компоненти файла мають однакову довжини, то можливий довільний (прямий) доступ до компонента файла. Найчастіше компонентами файла є записи.
В мові PASCAL введення-виведення інформації здійснюється через спеціальні файлові змінні, які мають складну внутрішню структуру, що відповідає типу Record. Файли з типом задаються так:
Type < ім`я типу > = File of < тип компоменти >;
Var < iдентифікатори >: < ім`я типу >;
Приклад:
Type ZAPIS = Record
Len: byte;
Ves: real
end;
KARTA = File of ZAPIS;
Var Fi: KARTA; Zt: ZAPIS;
Файли з типом в Паскалі дають можливість організувати два способи доступу до компонент файла: послідовний і прямий.
При послідовному способі доступу пошук починається з самого початку файла, далі йде перевірка по черзі кожної з його компонент, поки не знайдеться потрібна.
Прямий спосіб доступу дозволяє звертатися до компоненти за її номером. Порядкові номери компонент починаються з нуля.
11.1.1. Стандартні процедури обробки файлів з типом
Введемо такі позначення:
FV - ім'я файлової змінної;
St - String;
Ch - символьна змінна;
P - змінні p1,p2,...,pN того ж самого типу, що і компоненти файлової змінної FV;
n - цілочисельній вираз.
З врахуванням введених позначень розглянемо файлові процедури:
Assing(FV,St) – пов'язує файлову змінну FV з зовнішнім ім'ям файла. Повне ім'я файла на диску має вид: St:= [<ім'я диску:>]<ім'я файлу>[.<тип>]; Починаючи з момента виконання процедури Assign всі дії над файловою змінною FV еквівалентні дії над файлом, заданим значенням літерного рядка St.
Rewrite(FV) – створює новий файл. Ця процедура використовується для створення нового файлу на диску. Ім'я файла було попередньо визначено в процедурі Assign. Якщо на диску вже був файл з таким ім'ям, він знищується. Поточний вказівник файла встановлюється в першу позицію (з номером 0).
Reset(FV) – встановлює поточний вказівник на початок файлу. Якщо цю процедуру використати до неіснуючого файлу, виникає помилка.
Read(FV,P) – читає дані з файлу. Здійснюється зчитування з файлу FV значень p1,p2,..,pN. Після завершення виконання процедури вказівник переміщується до наступної компоненти.
Write(FV,P) – змінні p1,..,pN записуються в дисковий файл, визначений змінною FV. Після виконання процедури вказівник файлу переміщується до наступної компоненти.
Seek(FV,n) – встановлює вказівник на компоненту файла n. Відлік компонент починається з нуля.
Close(FV) – закриває файл, позначений змінною FV.
11.1.2. Стандартні функції обробки файлів з типом
1. FilePos(FV): LongInt – повертає номер компоненти файла, на який показує поточний вказівник файла, описаного змінною FV.
2. FileSize(FV): LongInt – повертає поточний розмір файлу, з яким пов'язана файлова змінна FV.
3. EoF(FV): Boolean – видає True, якщо наступний символ за прочитаним маркер кінця файла.
3.
11.1.3. Приклад обробки інформації в файлах з типом
Організувати файл прямого доступу "Записник", який містить прізвище знайомого і його номер телефону. Вияснити, чи є в записнику дані про знайомого із заданим номером телефону. Якщо є, то надрукувати його прізвище, якщо нема – надрукувати повідомлення: "Знайомого з таким прізвищем нема у записнику".
Поставлену задачу можна розв'язати за допомогою такої програми на PASCAL.
Приклад:
Uses Crt;
Type TelRef = Record
Name: String[20];
Number: Word;
end;
TelRefBase = File of TelRef;
Var F: TelRefBase;
R: TelRef;
S: String;
N, i: Word;
Procedure Create;
Begin
Rewrite(F);
i:=1;
Writeln('Символ $ - кiнець створення записника.');
While True do
begin
Writeln('Введiть прізвище ',i,' знайомого');
Readln(S);
if S[1]='$'
then begin
Close(F);
Exit
end;
R.Name:=S;
Writeln('Введiть номер його телефону');
Readln(N);
R.Number:=N;
Write(F,R);
i:=i+1
end
end;
Procedure ReadBase;
Begin
Reset(F);
Writeln('Введiть прізвище знайомого');
Readln(S);
While not Eof(F) do
begin
Read(F,R);
if R.Name=S
then
begin
Writeln('Номер телефона ',R.Number);
Exit
end;
end;
Writeln('Знайомого з таким прізвищем нема у записнику')
end;
BEGIN
ClrScr;
Writeln('Задайте iм"я файлу-записника');
Readln(S);
Assign(F,S);
While i<>3 do
begin
Writeln('Виберiть режим роботи:');
Writeln('1 - Створення записника');
Writeln('2 - Перегляд записника');
Writeln('3 - Кiнець роботи');
Readln(i);
Case i of
1: Create;
2: ReadBase;
end;
end;
END.
В поданій програмі процедура Create призначена для створення файлу з заданим типом, який являє собою певну базу даних – телефонний довідник. Процедура ReadBase дозволяє переглядати створену базу даних і вибрати з неї записи, що відповідають певній ознаці.
Дата публикования: 2014-11-04; Прочитано: 432 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!