Деректердің файлдық
типтері. Файлдармен жұмыс істеу
Файлдық тип, сыртқы тасымалдаушыда
орналасқан бір типтегі компоненттер
тізбегінен тұратын Паскаль тіліндегі
мәліметтер болып табылады. Ондағы компоненттердің
типі файлдық типтен басқа кез-келген
бола алады. Паскальда файлдық типтегі
айнымалылар ақпаратты енгізу-шығару
үшін қолданылады. Ақпаратты енгізу-шығару
алдында файлдық айнымалы assign процедурасының
көмегімен сыртқы файлмен байланысқан
болуы файлды оқу немесе оған жазу үшін
ол ашық болуы керек. Сонан соң енгізу-шығаруды
орындауға болады.
Файлдардың 3 тобы анықталған: текстік (тип text),
типтік (file of <тип>), типтік емес (file).
Олармен жұмыс істеу бір-бірінен ерекшеленеді.
Әдетте барлық файлдарды тізбектей,
ретпен ену мүмкіндігіне ие файлдар дейді.
Көңіл аударыңыз: seek процедурасының көмегімен
типтік және типтік емес файлдар үшін
ретсіз ену режимін орнатуға болады. Бұл
кезде файл компоненттерін нөмірлеу нөлден
басталады. Жұмыс аяқталған соң файл close
процедурасымен жабылуы тиіс.
Барлық файлдар үшін қолданылатын
стандартты процедуралар мен функциялар:
assign (f, name) - Файлдық айнымалы
f–ті сыртқы name файлымен байланыстыру.
chdir (path) - Ағымдағы директорияны
өзгерту.
close (f) - Ашылған файлды жабу.
erase (f) - Сыртқы файлды жою.
mkdir (path) - Каталог құру.
rename (f, new) - Сыртқы файлдың атын
өзгерту.
reset (f[, size]) - Алдын-ала бар файлды
ашу.
rewrite (f[, size]) - Бос, жаңа файл ашу.
Оған процедурасында көрсетілген атау
беріледі. Егер ондай файл бар болса,
онда ол файл өшіріледі.
rmdir (path) - Бос каталогты жою.
eof (f) - Файл соңы.
Текстік файлдар жолдарға бөлінген
символдар жиынтығынан тұрады. Әрбір жолдың
соңында жол соңын білдіретін белгі болады.
Текстік файлдармен жұмыс істеу ерекшелігі
мынада: мәндері read немесе write процедуралары
арқылы енгізілетін және шығарылатын
файлдар char немесе string типтерімен қатар
жай типтердің бірінде: бүтін, нақты,
логикалық (тек жауапқа шығаруда) бола
алады.
Бұл процедуралар ASCII –жолдармен де жұмыс
істей алады.
Текстік файлдар үшін, программаны
іске қосқанда автоматты түрде ашылатын
және жұмыс соңында автоматты түрде жабылатын
екі стандартты файлдық айнымалы бар.
Олар: INPUT -клавиатурамен байланыс; OUTPUT
-дисплей экранымен байланыс.
Егер text типіндегі
файлдармен жұмыс барысында файлдық айнымалы
көрсетілмесе, онда файлдық айнымалы INPUT
немесе OUTPUT қолданылуда деп есептейді.
Текстік файлды оқу үшін reset процедурасымен,
не оған жазу үшін rewrite немесе append процедураларының
бірімен ашу керек.
1. Мәтіндік файлдар
Текстік файлдармен жұмыс істейтін
процедуралар мен функциялардың сипаттамалары:
append (f) - Файлды ашу және соңына
жаңа ақпараттар енгізу.
read (f, <тізім>)- Файлдан оқу.
readln (f, <тізім>) – Файлдан жолдарды
оқу.
write (f, <тізім>) – Файлға жазу.
writeln (f, <тізім>) – Файлға жолдарды
жазу.
eoln (f)- Файл жолының соңы.
seekeof (f)- Файл соңы.
seekeoln (f) - Файл жолының соңы.
2. Типтік файлдар
Типтік файлдармен жұмыс істегенде
мынадай қосымша процедуралар мен функциялар
қолданылады:
read (f, <тізім>) – Файлдан типтері
көрсетілген компоненттерді оқу.
seek (f, num) - Файлдың нөмірі көрсетілген
компонентіне орналастыру.
truncate (f) - Ағымдағы компоненттен
бастап файлдың бөлігін жою.
write (f, <тізім>) - Типтері көрсетілген
компоненттерді файлға жазу.
filepos (f) - Файлдың ағымдағы компонентінің
номері.
filesize (f) - Файлдың ағымдағы компонентінің
өлшемі.
3.Типтік емес
файлдар
Типтік емес файлдармен жұмыс
істегенде мынадай қосымша процедуралар
мен функциялар қолданылады:
blockread (f, buf, n [,result])- Файлдан
компоненттерді оқу.
seek (f, num) - Файлдың номері көрсетілген
қажетті компонентіне орнату.
truncate (f) - Ағымдағы компоненттен
бастап файлдың бөлігін жою?
blockwrite (f, buf, n[, result]) - Типтері көрсетілген
компоненттерді файлға жазу.
filepos (f) - Файлдың ағымдағы компонентінің
номері.
filesize (f) - Файлдың ағымдағы компонентінің
өлшемі.
Бірнеше мысалдар қарастырайық.
Мазмұны мына суретте көрсетілгендей
екі файл берілсін.
Файл аты: Asan |
Файл аты: Murat |
1 3 5 6 7 8
2 4 4 4
3 2 6 2 2
4 3 3 3 3 3 3
5 7 7 7 7 7 7
6 9 9 5 9 9 9
7
3
1 |
Ata Ana Ara Sana
Almaty
A s t a n a
Kazahstan |
1-есеп. Әрбір элементін
еселеу арқылы Asan файлын оқу.
Бұл есепті шешу үшін енгізу және шығару
файлдарын текстік файл ретінде сипаттаймыз.
Asan файлы алдын-ала құрылып, мәліметтермен
толтырылған. Оны файлдық айнымалы
f1-мен байланыстырамыз да, оқу үшін
ашамыз.
Assign(f1, ‘Asan’);
Reset (f1);
F2 айнымалысын бос жолдың
көмегімен стандартты шығару
құрылғысымен (дисплей экранына) байланыстырамыз
және оны жауапқа шығарамыз.
assign (f2, ‘’);
rewrite (f2);
Дисплей орнына dos форматындағы
кез-келген файлдың атын көрсетуге болады.
Сонан соң f1 файлының элементтерін
оқитын және оларды бос орын арқылы
f2 файлына жазатын цикл ұйымдастырамыз.
Ол цикл eof(f1) функциясының көмегімен
f1 файлының соңы табылғанша орындалады.
Жұмыс соңында екі файлды да жабамыз.
program prog_1;
var f1, f2 : text; x : char;
begin
assign (f1, ‘c:\ e\one’); {Файл
орналасқан орынды көрсету}
reset(f1);
assign(f2,‘’);
rewrite(f2);
while not eof(f1) do
begin
read(f1, x);
write(f2, x+ ‘’+x)
end;
writeln;
close(f1); close(f2)
end.
Айнымалылар: f1, f2 – текстік файлдар; x
– файл элементі.
Өңделген Asan файлы мына түрде
жауапқа шығарылады. Әрбір символ бос
орын арқылы еселенеді.
1 1 3 3 3 3 5 5
6 6 7 7 8 8
2 2 4 4 4 4 4 4
3 3 2 2 6 6 2
2 2 2
4 4 3 3 3 3 3
3 3 3 3 3 3 3
5 5 7 7 7 7 7
7 7 7 7 7 7 7
6 6 9 9 9 9 5
5 9 9 9 9 9 9
7 7
3 3
1 1 |
2-есеп. «а» әрпін еселеу
арқылы Murat файлын оқыңдар.
program prog_2;
var f1, f2 : text; x : char;
begin
assign(f1, ‘Murat’);
reset(f1);
assign(f2, ‘ ‘);
rewrite(f2);
while not eof(f1) do
begin
read(f1, x);
if (x = ‘a’) or (x = ‘a’) then
write(f2, x+x)
else write(f2, x)
end;
writeln;
close(f1);
close(f2)
end.
Есепті шешу алгоритмі:
1. Бағдарлама денесін айнымалыларды
сипаттаудан бастаймыз.
2. Murat файлын f1 файлдық
айнымалымен байланыстырамыз және
оны оқу үшін ашамыз.
3. f2 айнымалысын стандартты
шығару құрылғысымен байланыстырамыз
да оны жауапқа шығару үшін
ашамыз.
4. f1 файлының элементтерін
оқитын және оларды f2 файлына
жазатын цикл ұйымдастырамыз. Ол
цикл eof(f1) функциясының көмегімен f1
файлының соңы табылғанша орындалады.
5. Егер «А» немесе «а» әрпі
кездессе ол жазу кезінде еселенеді.
6. Екі файлды да жабамыз.
Айнымалылар:
F1, f2 -текстік файлдар;
х – файл элементі.
Өңделген файлы мына түрде жауапқа
шығарылады. Әрбір «а» немесе «А» әрпі
екі рет жазылады.
AAtaa AAnaa AAraa Saanaa
AAlmaaty
AA s t aa n aa
Kaazaahstaan
|
3-есеп. Файлын оқыңдар және
«а» әрпін санаңдар.
program prog_3;
var f1 : text;
x : char;
k : integer;
begin
k = 0;
assing(f1, 'Murat');
reset(f1);
while not eof(f1) do
begin
read(f1, x);
if (x='a') or (x='a') then k :=k+1;
end;
writeln('a әрпінің саны:=',
k);
close(f1);
end.
Есепті шешу алгоритмі:
1. Бағдарлама денесін айнымалыларды
сипаттаудан бастаймыз.
2. Murat файлын f1 файлдық айнымалымен
байланыстырамыз және оны оқу
үшін ашамыз.
3. f1 файлының элементтерін
оқитын және «а» әрпін санайтын
цикл ұйымдастырамыз. Ол цикл, eof(f1)
функциясының көмегімен f1 файлының
соңы табылғанша орындалады.
4. Нәтижені жауапқа шығарамыз.
5. Файлды жабамыз.
Айнымалылар:
f1, f2 - текстік файлдар;
х – файл элементі;
к – әріптің санын анықтау.
Жұмыс нәтижесі:
А әрпінің саны:=16.
4-есеп. Asan файлын оқыңдар және
онда кездесетін цифрлардың қосындысын
табыңдар.
Бұл есептегі текстік файлдың элементтерінің
сандық мәнін анықтау үшін символдардың
реттелген типке жатаныдығын пайдалануға
болады. Цифрлардың ascii коды бірінен соң
бірі орналасқан. Сондықтан кез-келген
цифрдың мәнін былай анықтауға болады:
K := ord(x)-ord(‘0’);
program prog_4;
var f1 : text; x : char;
k, sum : integer;
begin
sum :=0;
assign(f1, ‘Asan’); reset(f1);
while not eof(f1) do
begin
read(f1, x);
if (x> = ‘0’) and (x<=‘9’) then
begin
k := ord(x)-ord(‘0’);
sum := sum+k
end;
end;
writeln(‘sum = :’, sum);
close(f1);
end.
Есепті шешу алгоритмі:
1. Бағдарлама денесін айнымалыларды
сипаттаудан бастаймыз.
2. Asan файлын f1 файлдық айнымалымен
байланыстырамыз және оны оқу үшін ашамыз.
3. f1 файлының элементтерін оқитын
және цифрлардың қосындысын анықтайтын
цикл ұйымдастырамыз. Ол цикл, eof(f1) функциясының
көмегімен f1 файлының соңы табылғанша
орындалады.
4. Нәтижені жауапқа шығарамыз.
5. Файлды жабамыз.
Айнымалылар:
f1, f2 -текстік файлдар; х –файл
элементі;
k – көмекші айнымалы; sum – цифрлар
қосындысы.
Жұмыс нәтижесі:
sum:=195
5-есеп. Murat файлының элементтерін
өзіне-өзін екі рет жазыңдар.
Бұл жағдайда файлды екі рнет ашпау үшін,
қажетті элементке орналастыру seek(f1, 0)
процедурасын пайдаланамыз, яғни оның
көмегімен f1 файлдың басына ораламыз.
Бұл процедурамен жұмыс істеу үшін
f1 файлдың типін, мысалы символдар
файлы ретінде көрсету керек.
program prog_5;
var f1 : file of char; f2 : text;
x : char; i : integer;
begin
assign(f1, 'Murat')
reset(f1);
assign(f2, ' ');
rewrite(f2);
for i := 1 to 2 do begin
while not eof(f1) do
begin
read(f1, x);
write(f2, x);
end;
writeln;
seek(f1, 0) end;
writeln;
close(f1);
close(f2)
end.
Есепті шешу алгоритмі:
1. Бағдарлама денесін айнымалыларды
сипаттаудан бастаймыз.
2. Murat файлын f1 файлдық айнымалымен
байланыстырамыз және оны оқу үшін ашамыз.
3. f2 айнымалысын стандартты
шығару құрылғысымен байланыстырамыз
да оны жауапқа шығару үшін ашамыз.
4. f1 файлының элементтерін оқу
және оларды f2 файлына жазу үшін екі
рет көру мүмкіндігін ұйымдастырамыз.
5. Екі файлды да жабамыз.
Айнымалылар:
f1 –символдар файлы; f2- текстік
файл ;
x –файл элементі; k – көмекші
айнымалы.
Ata Ana Ara Sana Almaty A s t a n a Kasahstan
Ata Ana Ara Sana Almaty A s t a n a Kasahstan |
6-есеп. Murat файлын оқыңдар
және соңынан басына қарай жауапқа шығарыңдар.
Файлды көру үшін, тек типтік
файлдарға қолданылатын файлдың ұзындығын
анықтайтын filesize(f1) функциясын пайдаланамыз.
Бұл кезде файлдың ұзындығы файл соңындағы
символмен анықталады. Бұл символды назардан
тыс қалдыру керек.
program prog_6;
var f1 : file of char;
f2 : text;
x : char;
t, i : integer;
begin
assign(f1, 'Murat');
reset(f1);
assign(f2, ' ');
rewrite(f2);
t :=filesize(f1);
for і:=t-1 downto 0 do
begin
seek(f1, i);
read(f1, x); write(f2, x)
end;
writeln; close(f1); close(f2)
end.
Есепті шешу алгоритмі:
1. Бағдарлама денесін айнымалыларды
сипаттаудан бастаймыз.
2. Murat файлын f1 файлдық айнымалымен
байланыстырамыз да оны оқу үшін ашамыз.
3. f2 айнымалысын стандартты
шығару құрылғысымен байланыстырамыз
да оны жауапқа шығару үшін ашамыз.
4. f1 файлының элементтерін соңынан
кері оқуды және оларды f2 файлына жазуды
ұйымдастырамыз.
5. Екі файлды да жабамыз.
Айнымалылар:
f1- символдар файлы; f2- текстік
файл;
x – файл элементі; t –
файл ұзындығы; i – цикл параметрі.
natshazaK a n a t s A ytamlA anaS arA anA atA |
7-есеп. Murat файлын өзіне-өзін
соңынан басына қарай жазылған түрде тізбектей
жазуды құрыңдар.
program prog_7;
var f1 : file of char;
f2 : text; x : char;
t, i : integer;
begin
assing(f1, 'Murat');
reset(f1);
assing(f2, ' ');
rewrite(f2);
t:=filesize(f1);
while not eof(f1) do
begin
read(f1, x); write(f2, x)
end;
writeln;
for i := t - 1 downto 0 do
begin
seek(f1, i); read(f1, x);
write(f2, x)
end;
writeln;
close(f1);
close(f2)
end.
Есепті шешу алгоритмі:
1. Бағдарлама денесін айнымалыларды
сипаттаудан бастаймыз.
2. Murat файлын f1файлдық айнымалымен
байланыстырамыз және оны оқу үшін ашамыз.
3. f2 айнымалысын стандартты
шығару құрылғысымен байланыстырамыз
да оны жауапқа шығару үшін ашамыз.
4. f1 файлының элементтерін
оқу үшін екі рет тізбектей көруді (бірінші
көру-басынан соңына дейін, ал екіншісі
соңынан басына дейін) және оларды f2 файлына
жазуды ұйымдастырамыз.
5. Екі файлды да жазамыз.
Айнымалылар:
f1- символдар файлы;
f2 – текстік файл;
x – файл элементі;
t – файл ұзындығы;
i – цикл параметрі.
Жұмыс нәтижесі:
Ata Ana Ara Sana Almaty A s t a n a Kazahstan
NatshazaK a n a t s A ytamlA anaS arA anA atA |
8-есеп. Murat файлында бірінші
нүктеден кейінгі сөздерді жойыңдар.
Бұл бағдарламада көрсетілген
позициядан бастап файлдың бір бөлігін
жою үшін truncate(f1) функциясын пайдаланамыз.
program prog_8;
var f1 : file of char; f2 : text;
x : char; k : integer;
begin
assing(f1, 'Murat'); reset(f1);
assing(f2, ' '); rewrite(f2);
k :=-1;
while not eof(f1)
do
begin
k := k+1;
read(f1, x);
if x<>'.' then write(f2, x);
else begin
seek{f1, k+1);
write(f2, x);
truncate(f1)
end;
end;
writeln;
close(f1);
close(f2)