110 likes | 222 Views
Failid. Risto Heinsar & Ott Madis Ozolit. Arvamusküsitlus. Mäletate viitasid? Nüüd kontrollime! . Faili avamine. Kasutame faili jaoks viitasid. Failiviida deklaratsioon: FILE * fi ; Faili avamine: fi = fopen (failinimi, režiim); // mõlemad parameetrid char tüüpi
E N D
Failid Risto Heinsar & Ott Madis Ozolit 2013
Arvamusküsitlus • Mäletate viitasid?Nüüd kontrollime! 2013
Faili avamine • Kasutame faili jaoks viitasid.Failiviida deklaratsioon:FILE *fi;Faili avamine:fi=fopen(failinimi, režiim); // mõlemad parameetrid char tüüpi • Kui faili ei õnnestu avada, siis viit jääb väärtusele NULL 2013
Faili avamine • Režiimid:„r“ – read (olemasolevat faili loetakse)„w“ – write (luuakse fail, kirjutatakse vana fail üle)„a“ – append (olemasolevat faili kirjutatakse edasi. Faili puudumisel uut ei looda) 2013
Faili sulgemine • Fail tuleb sulgeda selle kasutamise lõppedes. • Kõik failid tuleb sulgeda programmi lõpuks! • Faili sulgemine:fclose(failiviit); 2013
Failioperatsioonid • fscanf(failiviit, sisu, …); //lugemine failist, arvestab formaatimist • fgets(siht, pikkus, failiviit); //lugemine failist rea kaupa • fprintf(failiviit, sisu, …); // kirjutamine faili, arvestab formaatimist • fputs(sisu, failiviit); //kirjutamine faili rea kaupa • feof(failiviit) // faili lõpu kontrollimine. // tagastab int tüüpi väärtuse „0“,// kui faili lõpuni EI OLE jõutud 2013
Veel faili avamisest • Faili avamise õnnestumist tuleb alati kontrollida!St, kui nt avad faili „a“ või „r“ ja faili pole, siis programm ei tohi jätkata! FILE *sisend; //failiviidadeklareerimine char allikas[]={"numbrid.txt"} sisend=fopen(allikas,"r") //failiavamine if (sisend==NULL){ //kontrollime, et fail avati exit(1); // exit() funktsioontulebteegist "stdlib" } 2013
Näide 1 (read) #include <stdio.h> intmain(void) { FILE *sisend; char allikas[]={"numbrid.txt"}; sisend=fopen(allikas,"r"); intabi; while(!feof(sisend)) { // lugeminekuniksfaililõpunipole jõutud fscanf(sisend, "%d", &abi); printf("\n Loeti: %d",abi); } fclose(sisend); return 0; } 2013
Näide2 (write) #include <stdio.h> intmain(void) { FILE *v2ljund=fopen("numbrid2.txt","w"); inti; for(i=0; i<5; i++) { fprintf(v2ljund, "Väljastati: %d\n", i); } fclose(v2ljund); } 2013
Näide 3 (append) #include <stdio.h> intmain(void) { FILE *v2ljund=fopen("numbrid2.txt","a"); inti; for(i=0; i<5; i++) { fprintf(v2ljund, "Väljastati: %d\n", i); } fclose(v2ljund); } 2013
Tunnitöö • Sorteeri sisendfailist (enda loodud) loetavad arvud nii, et väljundfailis/failides oleksid arvud kasvavas järjekorras: • 3p saad, kui sorteerid nii, et võid kasutada arvuti mälu täiel määral ning tulemuse salvestad väljundfaili • 4p saad, kui sorteerid nii, et võid kõike kasutada aga sorteerimise tulemusel on paaritud arvud ühes failis, paaris teises failis. • 5psaad, kui sorteerid nii, et sa ei või faili sisu mällu lugeda, pead jagama 2 faili moodul 2 alusel (paaritud/paarisarvud) 2013