100 likes | 250 Views
Failid. Faili avamine. Failidega töötamise jaoks kasutame failiviitasid Failiviida deklaratsioon: FILE * fi ; Faili avamine: failiviit = fopen ( failinimi , režiim ) // mõlemad parameetrid char * tüüpi Kui faili ei õnnestu avada, siis viit jääb väärtusele NULL
E N D
Faili avamine • Failidega töötamise jaoks kasutame failiviitasidFailiviida deklaratsioon:FILE *fi;Faili avamine:failiviit =fopen(failinimi,režiim)// mõlemad parameetrid char* tüüpi • Kui faili ei õnnestu avada, siis viit jääb väärtusele NULL • Faili avamise õnnestumist tuleb alati kontrollida! 2014
Faili avamine • Režiimid: • „r“ – read (Faili lugemine) • „w“ – write (Faili kirjutamine. Samanimelise faili eksisteerimisel kirjutatakse üle) • „a“ – append (Olemasolevat faili kirjutatakse edasi lõpust) • Faili nimi: • Faili nimi koos laiendiga tekstistringina • Faili otsitakse vaikimisi samast kaustast programmiga, kui ei ole teisiti määratud (antud fullpathfailini) 2014
Faili sulgemine • Fail tuleb sulgeda selle kasutamise lõppedes. • Kõik failid tuleb sulgeda programmi lõpuks! • Faili sulgemine:fclose(failiviit); 2014
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 2014
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 *fi; //failiviidadeklareerimine char inputFile[]={"numbrid.txt"} fi=fopen(inputFile,"r") //failiavamine if (fi==NULL) //kontrollime, et fail avati { exit(1); // exit() funktsioontulebteegist "stdlib" } 2014
Näide 1 (read) #include <stdio.h> intmain(void) { FILE *fi; intabi; char inputFile[] = {"numbrid.txt"}; fi = fopen(inputFile,"r"); while(!feof(sisend)) { // lugeminekuniksfaililõpunipole jõutud fscanf(sisend, "%d", &abi); printf("\n Loeti: %d", abi); } fclose(sisend); return 0; } 2014
Näide2 (write) #include <stdio.h> intmain(void) { FILE *fo=fopen("numbrid2.txt","w"); inti; for(i=0; i<5; i++) fprintf(fo, "Väljastati: %d\n", i); fclose(fo); return 0; } 2014
Tunnitöö 1 • Sisendfailist loetakse täisarvulisi numbreid • Numbrid jaotatakse laiali kahte eraldiseisvasse faili, lähtudes põhimõttest • Paarisarvud ühte faili • Paaritud arvud teise faili • Sisendfailist tohib korraga olla mälus vaid hetkel töödeldav arv 2014
Tunnitöö 2 • Sisendfailist loetakse sisse õppeainete statistikat formaadis:<ainenimetus> <tulemustearv> <tulemused> Väljendusoskus 7 4 3 0 4 2 5 1 Side 5 3 4 4 5 0 Lineaaralgebra 2 1 4 ………. • Tulemuste hulgas saab teha otsingut. Otsingu tulemused salvestatakse logidena • Aine nimetuse alusel • Aine keskmine üle / alla x.x • Aine tulemusi üle / alla n 2014