Download - Úvod do jazyka C

Transcript
Page 1: Úvod do jazyka C

Úvod do jazyka C

Page 2: Úvod do jazyka C

2

Práca so súbormi

Vo väčšine programov sa pre vstup dát používajú súbory (z klávesnice sa zadávajú len základné údaje).

Spracované údaje majú cenu len v prípade že budú výsledky uložené do súborov.

Práca so súbormi je jednou zo základných znalostí programovania v jazyku C.

Page 3: Úvod do jazyka C

3

Základné pojmy

Súbor je postupnosť bajtov uložených na médiu (najčastejšie disku) v niekoľkých blokoch. Bloky majú rovnakú veľkosť a nemusia ležať za sebou. Ako sa s nimi pracuje je záležitosťou operačného systému. Prístup k súboru je možný sekvenčne alebo náhodilo. Budeme sa zaoberať len sekvenčným prístupom k súboru.

Z užívateľského hľadiska je súbor postupnosť po sebe idúcich bajtov od začiatku do konca súboru. Starosťou operačného systému je aby nám tieto bajty dodal v správnom poradí.

Page 4: Úvod do jazyka C

4

Základné pojmy

Z dôvodu čo najväčšieho obmedzenia počtu periférnych operácií (zvýšenie rýchlosti) sú I/O operácie bufferované.

Pre vstup to predstavuje: naraz sa číta celý blok dát z disku do pamäti (bufferu). Jednotlivé položky sa potom čítajú z pamäti a nie priamo z disku.

Pre výstup: dáta sa zapisujú do bufferu (pamäti) a keď je plný, zapíše sa celý obsah bufferu na disk ako jeden blok.

Page 5: Úvod do jazyka C

5

Začiatok práce so súbormi

Nehľadajte v práci so súbormi žiadne zložitosti

Základný dátový typ pre prácu so súbormi:

FILE *

Definícia premennej f pre prácu so súborom:

FILE *fp;

PoznámkaPoznámka: -identifikátor FILE musí byť veľkými písmenami !!!

- premenná f sa používa pre čítanie aj zápis do súboru.

Page 6: Úvod do jazyka C

6

Operácie so súbormi

Pred začiatkom práce so súborom je potrebné súbor otvoriť. Spôsob otvorenia súboru určuje, aké činnosti bude možné so súborom vykonávať.

Otvorenie súboru pre čítanie:fp = fopen(“a.txt”, “r”);

Otvorenie súboru pre zápis:fp = fopen(“a.txt”, “w”);

Page 7: Úvod do jazyka C

7

Operácie so súbormi

Zápis adresárovej cesty

fp = fopen(“\\a.txt”, “w”);

fp = fopen(“d:\\student\\a.txt”, “w”);

Page 8: Úvod do jazyka C

8

Testovanie na existenciu súbora, resp. jeho otvorenia

Používa sa porovnanie identifikátora súboru na hodnotu NULL.

if (fp==NULL){

printf(“\n\r Subor sa nepodarilo otvorit”);}

Page 9: Úvod do jazyka C

9

Testovanie na existenciu súbora, resp. jeho otvorenia

#include <stdio.h>#include <stdlib.h>#include <time.h>

main(){

FILE *fp;

fp=fopen("mena.txt","r");if(fp!=NULL){

…. vykoname nejake prikazyfclose(fp);

}else{

printf("\n\r Subor sa nepodarilo otvorit");}

}

Page 10: Úvod do jazyka C

10

Základné operácie so súbormi

Funkcie štandartnej knižnice stdio.h pre prácu so súborom. Súbor musí byť vopred otvorený.

Premenná f je typu FILE *:

formátované čítanie zo súboru fscanf(fp, “format”, argumenty);

formátovaný zápis do súborufprintf(fp, “format”, argumenty);

čítanie znaku zo súboru c = getc(fp);zápis znaku do súboru putc(c,fp);

Page 11: Úvod do jazyka C

11

Testovanie konca súboru

Na konci súboru je uložený znak EOF. Na testovanie konca súboru sa používa funkcia

feof(<identifikator_suboru>)

Tento spôsob používame vtedy, ak nevieme, aký veľký súbor je alebo koľko údajov sa v ňom nachádza.

Page 12: Úvod do jazyka C

12

Ukončenie práce so súborom

Po ukončení práce so súborom je nutné to operačnému systému oznámiť – uzatvoriť súbor

Funkcia pre uzatvorenie súboru

fclose(fp);

Operačný systém súbory uzatvára po ukončení programu, ale môže dojsť pri zápise k situácii, že program bude ukončený a dáta z bufferu nebudú zapísané na disk.

Page 13: Úvod do jazyka C

13

Základné operácie so súbormi

fscanf(fp, “%c”, znak); // nacitanie a zapis znaku

fprintf(fp, “%c”, znak);

fscanf(fp, “%d”, cislo); // nacitanie a zapis cisla

fprintf(fp, “%d”, cislo);

fscanf(fp, “%f”, zlomok); // nacitanie a zapis des. cisla

fprintf(fp, “%f”, zlomok);

Page 14: Úvod do jazyka C

14

Základné operácie so súbormi

Zapísanie textu s číslom

fprintf(fp, “Vysledok prikladu: %d”, cislo);

Zapísanie dvoch čísel

fprintf(fp, “Cislo %d na druhu je %d ”, cislo , cislo*cislo);

Page 15: Úvod do jazyka C

15

Základné operácie so súbormi

Zadanie:

a) zapísať druhú a tretiu mocninu čísla do súbora.

b) načítať druhú a tretiu mocninu čísla do súbora.

Page 16: Úvod do jazyka C

16

Základné operácie so súbormi

Najskôr je potrebné zapísať údaje:

#include <stdio.h>

int main(int argc, char *argv[]){

FILE *fp;int i;

fp=fopen("mocniny.txt","w");

for(i=0; i<10; i++){

fprintf(fp,"%d %d %d \n", i, i*i, i*i*i);}

fclose(fp);

}

Page 17: Úvod do jazyka C

17

Základné operácie so súbormiPotom tieto údaje načítame:

#include <stdio.h>

int main(int argc, char *argv[]){

FILE *fp;int i, cislo1, cislo2, cislo3;

fp=fopen("mocniny.txt","r");

for(i=0; i<10; i++){ fscanf(fp,"%d %d %d \n", &cislo1, &cislo2, &cislo3); printf("\n\r Cislo: %d x^2=%d x^3=%d", cislo1, cislo2, cislo3);}

fclose(fp);

}

Page 18: Úvod do jazyka C

18

Základné operácie so súbormiPotom tieto údaje načítame:

#include <stdio.h>

int main(int argc, char *argv[]){

FILE *fp;int i, cislo1, cislo2, cislo3;

fp=fopen("mocniny.txt","r");

while(!feof(fp)){ fscanf(fp,"%d %d %d \n", &cislo1, &cislo2, &cislo3); printf("\n\r Cislo: %d x^2=%d x^3=%d",cislo1,cislo2,cislo3);}

fclose(fp);

}

Page 19: Úvod do jazyka C

20

Zápis do súboru#include <stdio.h>#include <stdlib.h>#include <time.h>

main(){

FILE *fp;char meno[256];int i,vek;

fp=fopen("mena.txt","w");

for(i=0; i<5; i++){

printf("\n\r Zadaj meno: "); scanf("%s",&meno);printf("\n\r Zadaj vek: "); scanf("%d",&vek);fprintf(fp, "%s %d\n",meno,vek);

}

fclose(fp);}

Page 20: Úvod do jazyka C

22

Čítanie zo súboru#include <stdio.h>#include <stdlib.h>#include <time.h>

main(){

FILE *fp;char meno[256];int vek;

fp=fopen("mena.txt","r");

while(!feof(fp)){

fscanf(fp,"%s %d",&meno,&vek);printf("\n\r %s %d",meno,vek);

}fclose(fp);

}

Page 21: Úvod do jazyka C

24

FILE *fr; int c; long int pocet = 0;

if ((fr = fopen("PISMENA.TXT", "r")) == NULL) { printf("Subor PISMENA.TXT sa nepodarilo otvorit\n"); return 1; }

while ((c = getc(fr)) != EOF) pocet++;

printf("V subore PISMENA.TXT je %d znakov\n", pocet);

return 0;

Page 22: Úvod do jazyka C

25

#include <stdio.h>

int main(void){ FILE *fr; int i;

if ((fr = fopen("CISLA.TXT", "w")) == NULL) { printf("Soubor CISLA.TXT sa nepodarilo otvorit\n"); return 1; }

for (i = 0; i < 20; i++) fprintf(fr, " %.2f\n", i * 3.14);

fclose(fr);

return 0;}

Page 23: Úvod do jazyka C

27

Záver

Pozrieť si funkcie:

fseek, fread, fwrite


Top Related