Úvod do jazyka c
Post on 18-Jan-2016
35 Views
Preview:
DESCRIPTION
TRANSCRIPT
Ú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
top related