Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Не вказано

Інформація про роботу

Рік:
2025
Тип роботи:
Звіт про виконання лабораторної роботи
Предмет:
Інші

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України НУ „Львівська політехніка” Кафедра __________ ЗВІТ Про виконання лабораторної роботи №..... На тему:________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ ___________________ (Студент) ___________________ (Група) ___________________ (Керівник лаб. Занятть) ------Львів 200…------ Л а б о р а т о р н а р о б о т а N 9 Тема роботи: ОБРОБКА ФАЙЛIВ ЗАСОБАМИ МОВИ ТУРБО-ПАСКАЛЬ Файл - сукупнiсть логiчно пов'язаних та органiзованих певнним чи- ном даних на зовнiшньому носiї iнформацiї (диску). Турбо-Паскаль роз- глядає три класи файлiв: - текстовi; - типованi; - нетипованi. Текстовий файл складається з послiдовностi рядкiв символiв, кожен з яких закiнчується парою кодiв #13#10 ("перевiд рядка", "повернення каретки"). Оскiльки рядки файла майть рiзну довжину, то текстовi файли є файлами послiдовного доступу. Тобто, ввiд/вивiд n-го рядка файла мож- ливий лише пiсля зчитування/запису попереднiх (n-1) рядкiв, а сам файл вiдкривається тiльки для читання або тiльки для запису. Типований файл складається iз записiв (компонент) одного з допус- тимих у Паскалi типiв. Всi компоненти типованого файла мають однаковий розмiр, що визначається розмiром базового елемента. Тому можливим є доступ до кожного запису файла за його номером. Типовананi файли є фай- лами прямого доступу i вiдкриваються одразу для читання i для запису. Нетиповананi файли Турбо-Паскаль розглядає як сукупнiсть символь- них або байтових значень, незалежно вiд того, елементами яких даних во- ни є. Практично це означає, що кожен файл типований чи текстовий може розглядатись як нетипований, важливим є лише його розмiр. Нетипованi файли забезпечують максимальну швидкодiю при вводi/виводi iнформацiї, оскiльки не потребують затрат часу на перетворення даних. Нетипованi файли також вiдкриваються для вводу/виводу одночасно. Кожному файлу в програмi ставиться у вiдповiднiсть файлова змiнна одного з трьох типiв (за класом файла). А процес роботи з файлами вклю- чає наступнi етапи: - опис файлової змiнної (типи text, file of <базовий тип>, file); - встановлення зв'язку мiж файловою змiнною та конкретним фiзичним файлом (процедура Assign); - вiдкривання файла (процедури Reset, Rewrite, Append); - обмiн даними з файлом - ввiд/вивiд (процедури Read, Readln, BlockRead, Write, Writeln, BlockWrite); - закриття файла (процедура Close). Кожен клас файлiв має свої особливостi при виконаннi названих етапiв. Крiм наведених операцiй Турбо-Паскаль дозволяє здiйснювати аналiз помилок при роботi з файлами (за допомогою функцiї IOResult), перемiщення по файлу (процедура Seek, функцiя SeekPos), встановлення статуса кiнця рядка та кiнця файла (функцiї EOLn, EOF, SeekEOLn, SeekEOF), визначення розмiру файла ( функцiя FileSize), перейменування (процедура Rename) та витирання файла (процедура Truncate) та iншi дiї. Список стандартних процедур та функцiй для роботи з файлами наведений у наступних таблицях. Перелiк стандартних процедур та функцiй модуля System для роботи з файлами I.Процедури ------------------------------T---------------------------------------¬ ¦ Синтаксис ¦ Змiст ¦ +-----------------------------+---------------------------------------+ ¦Append (Var f:text); ¦Вiдкриває iснуючий текстовий файл для¦ ¦ ¦доповнення (запису в кiнець); ¦ ¦ ¦f - файлова змiнна. ¦ ¦Assign (Var f; name:string); ¦Пов'язує файлову змiнну f з зовнiшнiм¦ ¦ ¦файлом, iм'я якого задається параметром¦ ¦ ¦name (змiнна або символьний рядок). Як-¦ ¦ ¦що файл розташований в iншому каталозi,¦ ¦ ¦то необхiдно вказати шлях до нього. ¦ ¦BlockRead (Var f:file; ¦Читає з нетипованого файла n записiв¦ ¦ Var buf; n:word; ¦даних у область пам'ятi, видiлену для¦ ¦ [; Var result:word]); ¦змiнної buf; ¦ ¦ ¦f - змiнна нетипованого файла; ¦ ¦ ¦buf - змiнна довiльного типу, що задає¦ ¦ ¦буферну область, куди заноситься iнфор-¦ ¦ ¦мацiя з файла; ¦ ¦ ¦result - (необов'язковий параметр) по-¦ ¦ ¦вертає число фактично зчитаних блокiв. ¦ ¦BlockWrite (Var f:file; ¦Записує у файл n блокiв даних з областi¦ ¦ Var buf; n:word; ¦пам'ятi змiнної buf (див. BlockRead). ¦ ¦ [; Var result:word]); ¦ ¦ ¦Close (Var f); ¦Закриває вiдкритий файл. ¦ ¦Erase (Var f); ¦Витирає закритий файл, який представляє¦ ¦ ¦змiнна f. ¦ ¦Flush (Var f:text); ¦Переносить у текстовий файл iнформацiю¦ ¦ ¦з буфера виводу. ¦ ¦Read (f,v1[,v2,...vk]); ¦Якщо f - типований файл, то читає бiжу-¦ ¦ ¦чу його компоненту у змiнну v1. ¦ ¦ ¦Якщо f - текстований файл, то читає од-¦ ¦ ¦не або бiльше послiдовних значень у¦ ¦ ¦змiннi v1,...vk. ¦ ¦Readln (Var f:text; ¦Виконує Read-процедуру текстового файла¦ ¦ v1[,v2,...vk]); ¦з наступним переходом на новий рядок. ¦ ¦Rename (Var f; ¦Перейменовує закритий файл, представле-¦ ¦ newname:string); ¦ний змiнною f на нове iм'я, задане па-¦ ¦ ¦раметром newname. ¦ ¦Reset (Var f[:file; ¦Вiдкриває iснуючий файл i встановлює¦ ¦ recsize:word]); ¦вказiвник на його початок: ¦ ¦ ¦текстовий файл - вiдкривається тiльки¦ ¦ ¦для читання; ¦ ¦ ¦типований i нетипований файли вiдкрива-¦ ¦ ¦ються для читання i запису. ¦ ¦ ¦Для нетипованого файла додатково за-¦ ¦ ¦дається розмiр запису у байтах. ¦ ¦Rewrite (Var f[:file; ¦Створює i вiдкриває новий файл або¦ ¦ recsize:word]); ¦вiдкриває для запису iснуючий (занесена¦ ¦ ¦попередньо у файл iнформацiя при цьому¦ ¦ ¦витирається). ¦ ¦Seek (Var f; n:longint); ¦Встановлює вказiвник файла на компонен-¦ ¦ ¦ту з номером n. ¦ ¦SetTextBuf (Var f:text; ¦Створює буфер крористувача для обмiну¦ ¦ Var buf[;size:word]); ¦даними з текстовим файлом; ¦ ¦ ¦buf - змiнна достатнього розмiру, щоб¦ ¦ ¦вмiстити всю iнформацiю* ¦ ¦ ¦size - (необов'язковий параметр) визна-¦ ¦ ¦чає розмiр буфера. Без нього буфер має¦ ¦ ¦розмiр змiнної buf. ¦ ¦Truncate (Var f); ¦Витирає частину файла, яка розташована¦ ¦ ¦за позицiєю курсора. ¦ ¦Write (f,v1[,v2,...vk]); ¦Якщо f - типований файл, то записує¦ ¦ ¦значення змiнної v1 у бiжучу компоненту¦ ¦ ¦файла. ¦ ¦ ¦Якщо f - текстовий файл, то заносить¦ ¦ ¦значення змiнних v1,...vk у бiжучий ря-¦ ¦ ¦док файла. ¦ ¦Writeln (Var f:text; ¦Заносить данi у текстовий файл як про-¦ ¦ v1[,v2,...vk]); ¦цедура Write, виставляючи в кiнцi мар-¦ ¦ ¦кер кiнця рядка. ¦ L-----------------------------+---------------------------------------- II. Функцiї. ---------------------T---------------------------T---------------------¬ ¦ Синтаксис ¦ Значення, що повертається ¦ Пояснення ¦ +--------------------+---------------------------+---------------------+ ¦EOF (Var f):boolean ¦true - при досягненнi кiнця¦f - змiнна вiдкритого¦ ¦ ¦файла; ¦файла будь-якого кла-¦ ¦ ¦false - в iнших випадках. ¦су. ¦ ¦EOLn (Var f:text): ¦true - при досягненнi кiнця¦f - змiнна текстового¦ ¦ boolean ¦рядка; ¦файла. ¦ ¦ ¦false - в iнших випадках. ¦ ¦ ¦FilePos (Var f): ¦Номер запису файла, на яко-¦f - змiнна типованого¦ ¦ longint ¦му розташований вказiвник. ¦або нетипованого фай-¦ ¦ ¦ ¦ла. ¦ ¦FileSize (Var f): ¦Кiлькiсть записiв (розмiр)¦Розмiр файла в байт-¦ ¦ longint ¦файла. ¦тах можна визначити: ¦ ¦ ¦ ¦FileSize(f)*Sizeof(a)¦ ¦ ¦ ¦де Sizeof(a) - довжи-¦ ¦ ¦ ¦на компоненти файла. ¦ ¦IOResult: word ¦Повертає код результату ви-¦Функцiя без парамет-¦ ¦ ¦конання останньої операцiї¦рiв. ¦ ¦ ¦вводу/виводу: при успiшному¦ ¦ ¦ ¦завершеннi - 0, при невда-¦ ¦ ¦ ¦лому - код помилки. ¦ ¦ ¦SeekEOF(Var f:text):¦Стан кiнця для вiдкритого¦Кiнцевi пропуски та¦ ¦ boolean ¦текстового файла. ¦знаки табуляцiй iгно-¦ ¦ ¦ ¦руються. ¦ ¦SeekEOln ¦Стан кiнця рядка в тексто-¦Кiнцевi пропуски та¦ ¦ (Var f:text): ¦вому файлi. ¦знаки табуляцiй iгно-¦ ¦ boolean ¦ ¦руються. ¦ L--------------------+---------------------------+---------------------- Приклад програми. Необхiдно створити типований файл з iнформацiєю про киги: назва, автор, рiк видання, видавництво, наявнiсть книги в бiблiотецi, коротка анотацiя. Данi вводяться з клавiатури. Iснує текстовий файл з вiдповiдними даними про деякi книги: N п/п книги, автор (1-й рядок), назва (2-й рядок), видавництво i рiк видання (3-й рядок) - так по кожнiй книзi. Зi створеного типованого файла здiйснити доповнення текстового файла даними про книги наявнi у бiблiотецi та виданi не ранiше заданого року. Program FILES; Uses Crt; Const MinRik=1993; ESC=#27; {27 - код клавiшi "Esc"} Type knyga= record nazva: string[150]; avtor: string[150]; rik: word; vydav: string[50]; nayavn: boolean; anotac: string end; Var bibliogr: file of knyga; literat: text; filename: string[60]; zap_bibliogr: knyga; n,k: byte; c: char; pomim: boolean; Label m; BEGIN clrscr; { Вiдкриваємо типований файл для занесення даних } write ('Iм''я типованого файла з даними про книги - '); readln (filename); assign (bibliogr,filename); rewrite (bibliogr); gotoXY (30,whereY+1); writeln ('Введiть данi про книги'); gotoXY (17,whereY); writeln ('( для завершення "Esc" замiсть назви книги )'); n:=1; { n - номер книги, iнформацiя по якiй вводиться } { Цикл створення типованого файлу з даними про книги } repeat with zap_bibliogr do begin writeln; { Ввiд даних про n-ну книгу } writeln ('Книга ',n,':'); write (' Назва - '); c:=readkey; if c=ESC then break; write (c); readln (nazva); write (' Автор - '); readln (avtor); write (' Рiк видання та видавництво - '); readln (rik,vydav); write (' Наявнiсть в бiблiотецi (Так/Нi) - '); m: readln (c); case c of 'т','Т': nayavn:=true; 'н','Н': nayavn:=false; else writeln ('Введiть Т або Н'); goto m; end; writeln (' Анотацiя (до 255 символiв):'); readln (anotac) end; { Занесення введеної iнформацiї у запис файла } write (bibliogr,zap_bibliogr); Inc (n); until false; writeln; writeln ('Створено типований файл ', filename, ' з повною iнформацiєю про ', n-1, ' книги'); writeln; { Вiдкриваємо iснуючий текстовий файл для читання, щоб визначити номер останнньої занесеної в нього книги } {$I-} { вiдключаємо контроль вводу/виводу } repeat write ('Iм''я текстового файла з даними про книги - '); readln (filename); assign (literat,filename); reset (literat); pomim:=false; { pomim - наявнiсть помилки в iменi файла } if IOResult<>0 then begin pomim:=true; writeln (' Помилка в iменi файла !!!') end; until not pomim; {$I+} n:=0; { Читаємо файл, пiдраховуючи кiлькiсть рядкiв у ньому } while not EOF(literat) do begin readln (literat); Inc(n) end; close (literat); k:=n div 3; n:=k; {n=k - номер останнньої книги з текстового файла } { Вiдкриваємо файл для доповнення новими даними } append (literat); { Встановлюємо вказiвник типованого файла на його початок } seek (bibliogr,0); { Цикл читання записiв типованого файла та вибору з них даних, якi заносяться в кiнець текстового файла } while not EOF(bibliogr) do begin read (bibliogr,zap_bibliogr); with zap_bibliogr do if (rik>=MinRik) and nayavn then begin Inc (n); writeln (literat,' ',n,'. ',avtor); writeln (literat,' ',nazva); writeln (literat,' ',vydav,':',rik) end end; writeln; writeln ('Файл доповнено даними про ',n-k,' книги'); readln; close (bibliogr); close (literat) END. Завдання для роботи Лист передплати на перiодичнi видання Видання +——————————————+————————+—К-сть мiс.—+———П.I.П.——————+————————+ | Найменування | Iндекс | передплати | передплатника | Адреса | +——————————————+————————+————————————+———————————————+————————+ Впорядкувати його по зростанню індекса PROGRAM Accounting; USES crt; TYPE account=record Title :string [15]; Index :integer; Quantity :String [5]; Name :String [15]; Address :string [15]; end; VAR A :array [1..50] of account; Temp :Account; f_a :File of account; t :Text; Filetext, Filename:string; i,j,k,min:integer; BEGIN clrscr; Filetext := 'C:\File.txt'; Filename := 'C:\File1.txt'; assign(t, filetext); assign(f_a,filename); Rewrite (f_a); reset (t); k:=0; While (not eof(t)) do begin Readln(t,A[i].title); Readln(t,A[i].index) ; Readln(t,A[i].quantity); Readln(t,A[i].Name); Readln(t,A[i].address); k:=k+1; end; min:=A[1].index; For i:=1 to k do For j:=1 to k do With a[i] do if A[j].index<min then begin temp:=A[i]; A[i]:=A[j]; A[j]:=temp; end; Reset(f_a); For i:=1 to k do With A[i] do Begin write(f_a, a[i]); End; Readln; end.
Антиботан аватар за замовчуванням

27.12.2011 16:12-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!