1 / 22

файлове

файлове. Дефиниция на файл.

karma
Download Presentation

файлове

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. файлове • Дефиниция на файл. • Когато една програма работи с големи обеми от данни, възниква необходимостта те да се съхранят на някакво запаметяващо устройство - твърд диск, дискета, за да може тези данни да се ползват при следващо пускане на програмата или да се ползват от някаква друга програма.  • Съхранените на някакво запаметяващо устройство данни се наричат файл.  • Според вида на данните и начина на тяхната организация има различни видове файлове. Според начина на достъп до отделните данни във файловете те биват: с последователен и с пряк достъп. Начинът на достъп зависи и от вида на запаметяващото устройство. Например, лентовите устройства допускат само последователен достъп. Работата с файлове зависи и от операционната система. Различните операционни системи имат различни правила за задаване на запаметяващи устройства, директории и имена на файлове. Например в MS DOS името на файла е една дума до 8 латински букви и цифри дълга, а в MS Windows 95/ 98/ NT/ Me/ 2000/ XP името на файла може да е от няколко думи с обща дължина да 256 символи. В това ръководство ще се предържаме към правилата на MS DOS.

  2. 2. Файл от определен тип. • Файл от определен тип е крайна наредена съвкупност от еднотипни данни на външен носител. • Отделните елементи могат да бъдат от всякакъв тип с изключение от тип файл. Например елементите на един такъв файл могат да са от тип integer, real, boolean, char, низ от символи, масив, запис. • 3. Деклариране на файлова променлива. • За да се работи в една програма с файл трябва да се декларира файлова променлива. Деклариране на променлива за файл от определен тип става по следния начин: •     име: file of тип; • където име е името на файловата променлива, а тип е типа на елементите на файла.

  3. Пример: type        masiv = array[1 .. 100] of real;        student = recordname: string[50];            fn: longint;            estim: real        end;    var        f: file of integer;                 { файл от цели числа }names: file of string[50];    { файл от низове от по 50 символа }masf: file of masiv;              { файл от масиви от по 100 реални числа }studf: file of student;           { файл от записи }

  4. 4. Процедури и файлове за работа с файлове. 4.1. Връзка между името на файла и файловата променлива. За да се работи с един файл трябва първо да се осъществи връзка между името на файла на външния носител и файловата променлива. Това става чрез библиотечна процедура     procedure assign(f: file of тип; s: string); където f е файловата променлива, а низът s задава името на файла на външния носител. Ако е зададено само името на файла, то се счита, че файлът е в същата директория, в която е изпълнимата програма (с разширение .exe), която се получава след компилиране на програмата на Pascal. В низа s може да се зададе име на устройство и път до директорията, в която се намира файла. При това се ползват правилата на съответната операционна система за задаване на устройство и път до директория. 4.2. Отваряне на файл. След като се направи връзката между файловата променлива и името, файлът трябва де се отвори. Файловете от определен тип се отварят по два различни начина: - когато се създава нов файл :

  5. Отварянето на нов файл става чрез библиотечната процедура     procedure rewrite(f: file of тип); където f e файловата променлива. Тази процедура създава нов, празен файл с име и място указани преди това в процедурата assign. Ако вече има файл с това име, той се унищожава и се създава новия файл. В новия файл може само да се пише. - на вече съществуващ файл: Отварянето на вече съществуващ файл става чрез библиотечната процедура     procedure reset(f: file of тип); където f e файловата променлива. Тази процедура отваря файл с име и място указани преди това в процедурата assign. В така отворения файл може и да се чете, и да се пише. Ако не съществува файл, свърза с f, се издава съобщение за грешка. 4.3. Четене и писане във файл. Във файлове от определен тип може да се четат и пишат само данни от типа на файла. Те са подредени една след друга и данната, която се чете или се пише, се сочи от четящо-пишеща глава . При отварянето на файл с reset тази глава сочи първия елемент на файла, който е с номер 0. При всяко четене и писане във файла главата се премества толкова елемента надясно, колкото данни са прочетени или записани.

  6. - писане във файл: Писането във файла става с библиотечната процедура     write(файлова_променлива, израз1, израз2, ..., изразN) където стойностите на израз1, израз2, ..., изразN са от типа на елементите на файла. След записването на стойността на съответния израз във файла четящо-пишещата глава се премества един елемент надясно, т.е. след изпълнението на процедурата write главата се е преместила N елемента надясно. Писането може да продължи, докато има място на външния носител. - Четене от файл: Четенето от файл става с библиотечната процедура     read(файлова_променлива, променлива1, променлива2, ...,променливаN) където променлива1, променлива2, ..., променливаN са от типа на елементите на файла. При прочитане на елемент от файла, сочен от четящо-пишещата глава той се зарежда в съответната променлива и главата се премества към следващия елемент надясно. Така след завършване на процедурата read главата се преместила N елемента надясно. Четенето ще продължи, докато се стигне до края на файла.

  7. 4.4. Затваряне на файл. Когато завърши работата с файла, той трябва да се затвори. Затварянето на файл става с библиотечната процедура     procedure close(f: file of тип); където f е файловата променлива. 4.5. Проверка за край на файл. Когато се чете от един файл, при достигане края на файла трябва да се спре четенето. Проверката за край на файла става чрез библиотечната функция     function eof(f: file of тип):boolean; където f е файловата променлива. Тази функция връща true, когато четящо-пишещата глава е достигнала маркера за край на файла или файла е празен и false, когато главата сочи елемент от файла. Обикновено тази функция се поставя в условието на оператора за цикъл while. Ако името на файла е пропуснато, подразбира се стандарният файл input. Тогава краят на файла е достигнат, ако е прочен символът за край на файл (Ctrl+Z). Ако от клавиатурата не е въведен символ, функцията не е определена. Използването и в този случай води до пауза до въвеждане на символ. 4.6. Стандартни файлове. Inputи Outputса имена на стандартни файлове в Паскал. Input е свързан със стандартното входно устройство (обикновено клавиатурата), а output-със стандартното изходно устройство (обикновено екрана). Ако в оператора readне е указан файл, подразбира се input. Аналогично, ако в оператора write не е указан файл, подразбира се output.

  8. Пример 1: Броят на елементите на файла е известен; елементите са числа {Broia na elementite na faila e izvesten} program zad1; var i,n,x:integer; f: file of integer; begin write('n=');read(n); assign(f,'chisla.dat'); rewrite(f); for i:=1 to n do begin write('Vavedete cialo chislo:');read(x); write(f,x); end; close(f); writeln; writeln('Vie vavedohte slednite celi cisla:'); reset(f); for i:=1 to n do begin read(f,x); writeln(x) end; end.

  9. Пример 2: Броят на елементите на файла не е известен; елементите са числа {Broia na elementite na faila e ne e izvesten} program zad1; var i,x:integer; f: file of integer; begin assign(f,'chisla2.dat'); rewrite(f); write('Vavedete cialo chislo:');read(x); while not eof do begin write(f,x); write('Vavedete cialo chislo:');read(x); end; close(f); writeln; writeln('Vie vavedohte slednite celi cisla:'); reset(f); while not eof(f) do begin read(f,x); writeln(x) end; end.

  10. Пример 3: Броят на елементите на файла не е известен; елементите са числа {Broia na elementite na faila e ne e izvesten} program zad1; var i,x:integer; f: file of integer; begin assign(f,'chisla2.dat'); rewrite(f); write('Vavedete cialo chislo:');read(x); while not eof do begin write(f,x); write('Vavedete cialo chislo:');readln(x){проблем}; end; close(f); writeln; writeln('Vie vavedohte slednite celi cisla:'); reset(f); while not eof(f) do begin read(f,x); writeln(x) end; end.

  11. Пример 4: Броят на елементите на файла е известен; елементите са числа {Broia na elementite na faila e izvesten} program zad1; var i,n,x:integer; f: file of integer; begin write('n=');read(n); assign(f,'chisla.dat'); rewrite(f); for i:=1 to n do begin write('Vavedete cialo chislo:');readln(x){няма проблем}; write(f,x); end; close(f); writeln; writeln('Vie vavedohte slednite celi cisla:'); reset(f); for i:=1 to n do begin read(f,x); writeln(x) end; end.

  12. Пример 5: Броят на елементите на файла е известен; елементите са символи {Broia na elementite na faila e izvesten} program zad1; var i,n:integer; x:char; f: file of char; begin write('n=');read(n);{проблем} assign(f,'simvoli.dat'); rewrite(f); for i:=1 to n do begin write('Vavedete simvol:');read(x);{проблем} write(f,x); end; close(f); writeln; writeln('Vie vavedohte slednite simvoli:'); reset(f); for i:=1 to n do begin read(f,x); writeln(x) end; end.

  13. Пример 6: Броят на елементите на файла е известен; елементите са символи {Broia na elementite na faila e izvesten} program zad1; var i,n:integer; x:char; f: file of char; begin write('n=');readln(n);{няма проблем} assign(f,'simvoli.dat'); rewrite(f); for i:=1 to n do begin write('Vavedete simvol:');readln(x);{няма проблем} write(f,x); end; close(f); writeln; writeln('Vie vavedohte slednite simvoli:'); reset(f); for i:=1 to n do begin read(f,x); writeln(x) end; end.

  14. Пример 7: Броят на елементите на файла не е известен; елементите са символи {Broia na elementite na faila e ne e izvesten} program zad1; var x:char; f: file of char; begin assign(f,'simvoli.dat'); rewrite(f); write('Vavedete simvol:');read(x);{проблем} while not eof do begin write(f,x); write('Vavedete simvol:');read(x);{проблем} end; close(f); writeln; writeln('Vie vavedohte slednite simvoli:'); reset(f); while not eof(f) do begin read(f,x); writeln(x) end; end.

  15. Пример 8: Броят на елементите на файла не е известен; елементите са символи {Broia na elementite na faila e ne e izvesten} program zad1; var x:char; f: file of char; begin assign(f,'simvoli.dat'); rewrite(f); write('Vavedete simvol:');readln(x);{проблем} while not eof do begin write(f,x); write('Vavedete simvol:');readln(x);{проблем} end; close(f); writeln; writeln('Vie vavedohte slednite simvoli:'); reset(f); while not eof(f) do begin read(f,x); writeln(x) end; end.

  16. Пример 9: Броят на елементите на файла не е известен; елементите са символи {Broia na elementite na faila e ne e izvesten} program zad1; var x:char; f: file of char; begin assign(f,'simvoli.dat'); rewrite(f); write('Vavedete simvol:');read(x);{ не е проблем} while not eof do begin readln; write(f,x); write('Vavedete simvol:');read(x);{не е проблем} end; close(f); writeln; writeln('Vie vavedohte slednite simvoli:'); reset(f); while not eof(f) do begin read(f,x); writeln(x) end; end.

  17. 4.7. Пряк достъп до елементите на файл. - Ако трябва да се позиционира главата върху определен елемент от файла за да се прочете или да се запише нова стойност в него се използва библиотечната процедура     procedure seek(f: file of тип; k: integer); където f е файловата променлива, а k е номера на елемент от файла, върху който се позиционира главата. Номерата на елементите във файла се номерират от 0 на нататък, т.е. първият елемент е с номер 0. Точно чрез seek се осъществява пряк достъп до файл. Забележка: файлът трябва да бъде отворенс reset. Ако броят на елементите на файла е n, то seek(f,n) премества указателя на файла след последния му елемент и функцията eof(f) има стойност true. - Чрез библиотечната функция function filesize(f: file ofтип): integer; се проверява броя на елементите във файл. Забележка: файлът трябва да бъде отворенс reset. Ако файлът е празен, функцията връща 0. - Библиотечната функция     function filepos(f: file of тип): integer; определя номера на елемента сочен от четящо-пишещата глава. Ако указателят е в началото на файла, функцията връща 0. Ако указателят на файла е в края на файла, то filepos(f)=filesize(f). Забележка: файлът трябва да бъде отворенс reset.

  18. 5. Някой алгоритми за работа с файлове 5.1. Копиране на файлове program copyfile; var f,g:file of integer; x:integer; begin assign(f,'chisla.dat'); assign(g,'copyfile.dat'); rewrite(g); reset(f); while not eof(f) do begin read(f,x); write(g,x); end; close(f);close(g); reset(g); writeln('Elementi na kopieto:'); while not eof(g) do begin read(g,x); write(x,' '); end; end.

  19. 5.2. Търсене на елемент във файл program tarsenet; var f:file of integer; x,a:integer; found:boolean; begin assign(f,'chisla.dat'); reset(f); write('Vavedete chislo:');read(a);found:=false; if eof(f) then writeln('Failat e prazen. Elementat ne e nameren.') else begin read(f,x); while (not eof(f)) and (not found) do begin if a=x then found:=true; read(f,x); end; if found then writeln('Elementat e nameren') else writeln('elementat ne e nameren'); close(f); end; end.

  20. 5.3. Включване на елемент във файл. Операцията е възможна единствено в края на файл. 1- ви вариант: презаписва се първият елемент program vklucvane; var f:file of integer; x:integer; begin assign(f,'chisla.dat'); reset(f); write('Vavedete chislo:');read(x); write(f,x); close(f); end.

  21. 2-ри вариант: добавяне на елемент в края на файл Указателят на файла трябва да се позиционира след последния му елемент program vklucvane; var f:file of integer; x:integer; begin assign(f,'chisla.dat'); reset(f); while not eof(f) do read(f,x); write('Vavedete chislo:');read(x); write(f,x); close(f); end.

  22. 3-ти вариант: добавяне на елемент в края на файл var f:file of integer; x,br:integer; begin assign(f,'chisla.dat'); reset(f); br:=filesize(f); seek(f,br); write('Vavedete chislo:');read(x); write(f,x); close(f); end.

More Related