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

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

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

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

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

Міністерство освіти і науки України НУ „Львівська політехніка” Кафедра __________ ЗВІТ Про виконання лабораторної роботи №..... На тему:________________________________________________________________ ________________________________________________________________________ ________________________________________________________________________ ___________________ (Студент) ___________________ (Група) ___________________ (Керівник лаб. Занятть) ------Львів 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:37

Коментарі

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

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

Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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