Vi fəsil. C++ dilində proqramlaşdırma


Birbaşa müraciətlə olan fayllar haqqında



Yüklə 1,02 Mb.
səhifə72/74
tarix04.01.2023
ölçüsü1,02 Mb.
#121980
1   ...   66   67   68   69   70   71   72   73   74
Alqoritmik dillər(C kitab) (10)

6.60.Birbaşa müraciətlə olan fayllar haqqında
Faylda verilənlərin ardıcıl axtarışı zamanı proqram verilənləri faylın başlanğıcından başlayaraq oxuyur və bu proses tələb olunan element tapılana qədər davam edir. Bu isə öz növbəsində proqramın yerinə yetirilməsi müddətində faylın ardıcıl olaraq hər dəfə faylın başlanğıcından başlayaraq bir neçə dəfə emal olunmasına səbəb olar. İfstream ofstream siniflərinin üzvü olan funksiyalar vardır ki, onların köməyi ilə faylın göstəricinin mövqeyini müəyyən etmək olar. Bu mövqe fayldan oxunan və ya yazılan baytdan sonraki baytın nömrəsi ilə müəyyən olunur. Belə üzv-funksiyalar istream sinfi üçün seekg funksiyası(axından elementi götürən zaman mövqeyləşməni təmin edir) və ostream sinfi üçün seekp(axına elemnti yerləşdirmək üçün) funksiyasıdır. Istream sinfinin istənilən obyekti <> göstəricisinə malikdir ki, bir göstərici növbəti daxil edilən baytın nömrəsini göstərir. ostream sinfinin istənilən obyekti <
>
göstəricisinə malikdir ki, bu göstərici növbəti çıxışa verilən baytın nömrəsini göstərir. Məsələ,
infile.seekg(0);
-göstərici faylın başlanğıcını göstərir. seekg funksiyasının arqumenti long int tipli tam ədəd olur. Bu funksiyanın 2-ci arqumenti mövqeyləşmənin istiqamətini göstərir. Mövqeyləşmənin istiqamətləri aşağıdakilar ola bilər:
-ios::beg(susmaya görə başa düşülür)-axının başlanğıcına görə mövqeyləşmə;
-ios::cur-axında carı mövqeyə görə mövqeyləşmə;
-ios::end-axının sonuna nəzərən mövqeyləşmə.
Faylın mövqeyinin göstəricisi tam ədəd olub, faylın başlanğıc mövqeyindən başlayaraq baytların sayı ilə müəyyən olunan mövqeyi göstərir. Bəzən buna faylın başlanğıcına nəzərən yerdəyişmə də deyilir. Axından elemeneti çıxarmaq üçün faylın göstəricisinin mövqeyləşməsinə aid misallara baxaq:
//fileobject faylının n-ci baytının mövqeyləşməsi
//susma prinsipinə görə ios::beg fərz olunur
fileobject.seekg(n);
//fileobject faylının n-bayt qabağa doğru mövqeyləşməsi
fileobject.seekg(n, ios::cur);
//fileobject faylının sonundan başlayaraq m mövqeyinin təyini
fileobject.seekg(m, ios::end);
//fileobject faylının sonunun mövqeyi
fileobject.seekg(o, ios::end):

Eyni əməliyyatları ostream sinfinin seekp funksiyası vasitəsi ilə də yerinə yetirmək olar. tellg( ) tellp( ) funksiyaları <> axından götürmək və <


>
axına daxil etmək göstəricilərinin uyğun olaraq qiymətlərini verir. Aşağıdaki mənimsətmə operatoru long tipli l dəyişəninə <> göstəricisinin qiyməti mənimsədilir:
l=fileobject.tellg( );

seekg( ) seekp( ) funksiyalarından istifadə edən fayl ikilik rejimdə (ios::binary) açılmalıdır.
seekg( ) seekp( )-funksiyalarının prototipləri aşağıdaki kimidir:
istream&seekg(off_type yerdəyişmə, ios-sinfinin tərkibində təyin olunan sadalanan tip);
iostream&seekp(off_type yerdəyişmə, ios-sinfinin tərkibində təyin olunan sadalanan tip);
off_type ios-sinfində təyin olunan tam tipdir və yerdəyişmə parametrinin imkan verdiyi qədər qiymət ala bilər. Ios-sinfinin tərkibində təyin olunan sadalanan tiplərdə aşağıdaki qiymətlər yerləşir:
ios::beg
ios::cur
ios::end
Misal 1. Aşağıdaki proqramda seekp( ) funksiyasının işləmə prinsipi göstərilmişdir. Bu proqramda faylda verilən simvol dəyişdirilir. Faylın adını, faylda dəyişdirilən baytın nömrəsini və dəyişdirilmək üçün olan yeni simvol əmr sətrində verilir. Fayl həm oxumaq, həm də yazmaq üçün aşılır.
#include
#include
#include
using namespace std;

int main(int argc, char*argv[ ])
{if(argc!=4){
cout<<”Dəyişmək:\n”;
return 1;
}
fstream out(argv[1], ios::in/ios::out/ios::binary);
if(!out){
cout<<”faylı açmaq mümkün deyildir\n”;
return 1;
}
out.seekp(atoi(argv[2]), ios::beg); //2-ci bayt qeyd olunur
out.put(*argv[3]); //simvolu göstərilən faylın 2-ci baytına yazın
out.close( );
return 0;
}


Yüklə 1,02 Mb.

Dostları ilə paylaş:
1   ...   66   67   68   69   70   71   72   73   74




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin