Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Muasir proq dil C++.doc
Скачиваний:
15
Добавлен:
01.05.2025
Размер:
7 Мб
Скачать
☆
    1. Fayla girişin ümumi alqoritmi

Proqram fayla oxumaq, yazmaq və s. məqsədlə müraciət et­­dik­də bunu aşağıdakı alqoritm üzrə yerinə yetirir.

Əvvəlcə faylı açmaq lazımdır. Beləliklə, proqramda fayl­ və axın obyekti arasında aşağıdakı əlaqə marşrutu yara­nacaq: fstream / ofstream və ya ifstream (faylın açılması ücün isti­fa­də olunur).

Sonra proqram fayldan oxuyur və ya fayla yazır (və ya ha­mı­sı birlikdə).

Nəhayət, proqram faylı bağlayır. Proqramda fayl və axın ob­yek­ti arasında əlaqə marşrutunun saxlanması sistem resurs­la­rı­nı tələb edir, faylın bağlanması isə əgər bu resurslar lazım deyilsə, onları azad edir. Buna görə də əgər əvvəlki müraciət zamanı fayl bağlanmayıbsa, onda ona yenidən müraciət etmək olmaz.

9.4. Faylın açılması

9.4.1. Yazmaq üçün faylın açılması

Yazmaq üçün fayl açarkən ya ofstream, ya da fstream obyek­tindən istifadə etmək lazımdır. ifstream obyektini bu məqsəd üçün istifadə etmək olmaz, ona görə ki, o, yalnız fayldan oxumaq üçün istifadə olunur.

ofstream və fstream obyektləri faylı aşağıdakı iki üsul­­dan biri ilə aça bilərlər. Birincisi ad altında funksiya – həddin isti­fa­də­sin­dən ibarətdir (open). Ikincisi isə konstruktorun tət­bi­qindən ibarətdir.

ofstream və fstream obyektlərində open funksiya – həddi is­­ti­­fa­də olunur, onun birinci parametri – açılan faylın adı və ona olan yoldur. Ikinci parametr ofstream və ya fstream ob­yekt­­lə­rin­dən hansının open funksiya–həddini çağırmasından və sus­ma­ya görə rejimdən fərqli olan rejimdə fayla müraciət etmə istə­yindən asılıdır.

Yazmaq üçün açılan faylın artıq mövcud olması vacib deyil. Əgər o, mövcud deyilsə, onda onu yazmaq üçün aç­ma­­ğa cəhd edəndə baxılan yolda göstərilən adla o, avtoma­tik ola­raq açılacaq. Lakin faylın mövcud olub – olma­ma­sın­dan ası­lı ola­raq açılan faylın adı və yolu hökmən göstə­ril­mə­li­dir. Bu mə­lu­ma­tı isə faylın ya nisbi yolu, ya da mütləq yo­lu şək­lin­də ver­mək olar.

Nisbi yol – bu bizim proqramın yerləşməsinə nəzərən olan yol­dur. Məsələn, aşağıdakı tələbə.dat faylı üçün açılan ifa­də proq­ramla eyni kataloqda yerləşir:

ofstream outfile

outfile . open(“telebe. dat”);

Mütləq yol – diskin hərfi ilə başlayan yoldur və faylın özünə qə­dər hər bir kataloq və altkataloqu özündə saxlayır. Məsələn, əgər telebe.dat faylı C diskində yerləşən College kataloqunun Qrup altkataloqunda yerləşirsə, onda o yazmaq üçün mütləq yolun köməyilə aşağıdakı kimi açılacaq:

ofstream outfile;

outfile.open (“c:\\ college \\ qrup \\ telebe.dat”);

Hansı yoldan istifadə olunursa olunsun, open funk­si­ya­sının pa­ra­metrinin sətir literal olması vacib deyil. O, sətir dəyişən də ola bilər. Məsələn,

ofstream outfile;

char filename[80];

cout << “enter name of file:”;

cin >> filename;

outfile . open (filename);

Qeyd. Əgər proqram müxtəlif kompüterlərdə istifadə olunursa, onda nisbi yol seçmək daha əlverişlidir.

Open funksiyasının istifadəsində faylın hansı rejimdə açıl­ma­sı da mühüm rol oynayır. Ilk növbədə faylın nə üçün açıl­ma­sı seçilir – oxumaq, yazmaq və s. Lakin seçimin başqa im­kan­ları da mövcuddur, onlardan hər biri faylın açılması rejiminin “flaqı”adlanır (cədvəl 9.1).

Cədvəl 9.1.

Faylın rejimi

Təsviri

ios::app

Birləşmə rejimi. Faylın məz­munu sax­­lanılır və bütün çı­xış faylın so­nu­na yazılır.

ios:: ate

Əgər fayl artıq mövcud­dur­sa,­ proq­­ram onun­­­ sonuna­­ ötü­­rü­­lür. Çıxış fay­lın istə­ni­lən yerində yazıla bilər. Bu flaq əsasən ikilik rejimdə istifadə olunur.

ios:: binary

Ikilik rejim. Məlumat fayla mətn şək­lində deyil, ikilik formatda yazı­lır.

ios:: in

Daxiletmə rejimi. Məlumat fayl­dan oxu­nur. Əgər fayl mövcud deyil­sə, o, yara­dı­l­ma­­yacaq.

ios:: out

Çıxış rejimi. Informasiya fayla ya­zı­lır. Susmaya görə, faylın məzmunu ye­­nidən yazılır.

ios:: trunc

Əgər fayl artıq mövcud­dur­sa, onun məz­­munu silinəcək və ya yeni­dən yazı­lacaq. Bu rejim susmaya gö­rə ios:: out rejimində seçilmişdir.

Əgər faylın açılması üçün ofstream obyekti istifadə olu­nursa, onda heç bir faylın açılma rejiminin flaqına ehtiyac yox­dur. Çünki ofstream obyekti yalnız yazmaq üçün faylın açılmasına xidmət edir və faylın oxumaq üçün açılmasında tət­biq oluna bilməz.

Buna baxmayaraq, əgər susmaya görə faylın ikilik rejimdə de­yil, mətn rejimində açılması və verilənlərin mövcud fayla əlavə edilməyib yenidən yazılması bizi qane etmirsə, onda ofstream obyektinin open funksiyası ilə birlikdə faylın bir və ya bir neçə rejim flaqını istifadə etmək olar.

Beləliklə, faylı açarkən iki və daha çox flaqı uzlaşdırmaq olar. Məsələn, aşağıdakı operatorlar faylı ikilik rejimdə açır, sonra isə onları yenidən yazmaq əvəzinə verilənləri bir­ləş­di­rir­lər (bit­lər üzrə “və ya “(|) operatoru);

ofstream outfile;

outfile . open (“telebe . dat”, ios::binary | ios::app);

Əgər faylın açılması üçün ofstream obyekti istifadə olunursa, onda fayl rejimi flaqlarını təsvir etmək lazım deyil, əgər faylın açılması üçün fstream obyekti tətbiq olunursa, onda hökmən bunu etmək lazımdır. Bu halda ofstream obyekti oxumaq üçün yox, yalnız yazmaq üçün istifadə oluna bilər, fstream obyekti isə hər iki məqsədin qazanılmasına xidmət edir. Ona görə də əvvəlcədən dəqiq müəyyənləşdirmək lazımdır ki, open funk­si­ya­sı hansı məqsədlə tətbiq edilir: yazmaq üçün, oxumaq üçün və ya birdən hamısı üçün.

Aşağıdakı proqram fraqmentində fstream obyektinin open funksiyası faylı yalnız yazmaq üçün açır:

fstream afile;

afile . open (“telebe . dat”, ios::out);

Yazmaq üçün faylı açarkən fstream və ya ofstream konstruktorlarını da istifadə etmək olar. Konstruktor – obyektin nüs­xəsini yaratmaq istəyərkən avtomatik çağrılan funksiyadır.

Obyektin nümunəsi verilənlərin int sadə tipli dəyişə­ni­nə ox­şa­yır. Məsələn, aşağıdakı operator age adlı tam ədəd nü­mu­nə­si­nin yaradılması ola bilər:

int age;

Aşağıdakı operator isə afile adlı fstream nümunəsi yara­dır:

fstream afile;

Obyektin konstruktorları həddən artıq yüklənə bilərlər, yəni bir obyekt üçün parametrsiz konstruktor , bir parametrli, iki parametrli konstruktor və s. yaradıla bilər. Məsələn, yu­xa­rı­dakı operatorda fstream afile – fstream obyektinin para­metr­siz konstruktorudur.

Aşağıdakı operator ofstream obyektinin bir parametrli kons­tru­ktorunu çağırır:

ofstream outfile(“telebe . dat”, ios::out);

Növbəti operator fstream nümunəsi yaratmaqla və telebe. da­­t faylını çıxış üçün açmaqla, fstream obyektinin iki parametrli konstruktorunu çağırır.

fstream afile(“telebe . dat”, ios::out);

Öz-özlüyündə bir operatorda ofstream (və ya fstream) də­yi­şə­ni­nin elan olunması, sonra isə ikinci operatorda open funksiya –­həddinin çağırılması sadə dəyişənin bir operatorda elan olunması və ona ikinci operatorda qiymət mənimsədilməsi ilə analojidir. Məsələn,

int age;

age=54;

Bir və ya iki parametrli ofstream (və ya fstream) kon­struk­torunun istifadə olunması sadə dəyişənin adlan­dı­rıl­masına ekvivalentdir:

int age=54;

Misal 9.1. Faylın yaradılmasına aid proqram.

Proqram Dev-C++ da işlənilmişdir. Bunun üçün File men­yu­sun­dan New->Project… altmenyusunu seçib, açılan pən­cə­rə­də şəkil­dəki kimi Console Application və C++Project qeyd edib OK düyməsini sıxmaq lazımdır.

Qeyd: Əgər proqram standart C–də yazılmışdırsa, onda C Poject –i aktivləşdirmək lazımdır.

Bundan sonra, layihəyə ad verilməsi tələb olunur:

Yeni ad verib Сохранить düyməsini sıxmaq lazımdır. Indi isə proqramın mətnini yığmaq lazımdır:

#include <stdlib.h>

#include <iostream.h>

#include <fstream.h>

using namespace std;

int main()

{ ofstream outtelebefile("telebe.dat",ios::out);

if(!outtelebefile){

cerr<<"fayli acmaq mumkun deyil"<<endl;

exit(1);

}

cout<<"kodu, adi ve toplanan bali daxil et"­<<­endl­<<­">>";

int account;

char name[10];

float bal;

while(cin>>account>>name>>bal){

outtelebefile<<account<<' '

<<name<<' '<<bal<<endl;

cout<<">>";

}

getch();

return 0;

}

Proqramda ofstream outtelebefile("telebe.dat",ios::out) elanı çıxış üçün açılan telebe.dat faylı ilə əlaqəli və ofstream sinfindən outtelebefile obyektini yaradır. Proqramın mətnini yığıb qurtardıqdan sonra Execute menyusundan Compile & Run altmenyusunu sıxmaqla açılmış pəncərədə verilənləri daxil etmək lazımdır. Faylın sonu üçün isə Ctrl + Z düymələrini birgə sıxmaq lazımdır. Alınmış nəticə aşağıdakı kimi olacaq:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]