Úvod do jazyka c
DESCRIPTION
Úvod do jazyka C. Programovací jazyk C. 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. - PowerPoint PPT PresentationTRANSCRIPT
Ú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.
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í.
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.
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.
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”);
7
Operácie so súbormi
Zápis adresárovej cesty
fp = fopen(“\\a.txt”, “w”);
fp = fopen(“d:\\student\\a.txt”, “w”);
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”);}
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");}
}
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);
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.
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.
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);
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);
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.
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);
}
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);
}
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);
}
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);}
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);
}
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;
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;}
27
Záver
Pozrieť si funkcie:
fseek, fread, fwrite