Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot. Tiedostot



Samankaltaiset tiedostot
Tiedosto on yhteenkuuluvien tietojen joukko, joka tavallisimmin sijaitsee kiintolevyllä, muistitikulla tai jollakin muulla fyysisellä tietovälineellä.

Binäärioperaatiot Tiedostot ja I/O

Binäärioperaatiot Tiedostot ja I/O

Moduli 5: Kehittyneitä piirteitä

Merkkijono määritellään kuten muutkin taulukot, mutta tilaa on varattava yksi ylimääräinen paikka lopetusmerkille:

// // whiledemov1.c // #include <stdio.h> int main(void){ int luku1 = -1; int luku2 = -1;

C-ohjelmointi, syksy 2006

C-ohjelmointi, syksy Yksiulotteiset taulukot Moniulotteiset taulukot Dynaamiset taulukot. Binääritiedostot. Luento

C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. Operaatioiden suoritusjärjestys

Luennon sisältö. Taulukot (arrays) (Müldnerin kirjan luku 10) Yksiulotteiset taulukot. Mikä taulukko on? Taulukko-osoitin. tavallinen osoitin

Ohjeet. AS C-ohjelmoinnin peruskurssi Aalto-yliopiston sahkotekniikan korkeakoulu Tentti , Raimo Nikkila

Ohjelmoinnin perusteet Y Python

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Tiedosto. Tiedostot ovat joko binääritiedostoja tai tekstitiedostoja. Tekstitiedostot

Pythonin Kertaus. Cse-a1130. Tietotekniikka Sovelluksissa. Versio 0.01b

C-kieli mahdollistaa hyvin tiiviin ja samalla sekavan tavan esittää asioita, kuitenkin hyvän ohjelman tulisi olla mahdollisimman helppolukuinen ja

Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö C-ohjelmassa

C-ohjelmointi, kevät Merkkijonot Komentoriviparametrit. Luento

C-ohjelmointi, syksy Merkkijonot Komentoriviparametrit. Luento C-ohjelmointi Syksy

Merkkijonot Komentoriviparametrit

Merkkijonot Komentoriviparametrit

Java-kielen perusteet

Ohjelmoinnin perusteet Y Python

tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi

Lyhyt kertaus osoittimista

Tietueet. Tietueiden määrittely

Ohjeet. Jaa vastauksesi konsepteille siten, etta:

Java-kielen perusteet

Tietuetyypin määrittely toteutetaan C-kielessä struct-rakenteena seuraavalla tavalla:

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

int puts(char *buff) Kirjoittaa puskurissa buff \0 :lla päätetyn merkkijonon standarditulostukseen. Formatoitu konsoli-i/o Tiedostot

Ohjelmoinnin perusteet Y Python

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

Operaattoreiden ylikuormitus. Operaattoreiden kuormitus. Operaattoreiden kuormitus. Operaattoreista. Kuormituksesta

Johdatus ohjelmointiin / Lausekielinen ohjelmointi 1 & 2

Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan.

2. C-kieli ja ongelmanratkaisu

Java-kielen perusteita

Ohjelmoinnin perusteet Y Python

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

ATK tähtitieteessä. Osa 4 - IDL input/output. 19. syyskuuta 2014

12. Näppäimistöltä lukeminen 12.1

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

1. Mitä seuraava ohjelma tulostaa? Vastaukseksi riittää yksi rivi joka esittää tulosteen. (6 p)

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa.

Rakenteiset tietotyypit Moniulotteiset taulukot

3. Binääripuu, Java-toteutus

Osa. Listaus 2.1. HELLO.CPP esittelee C++ -ohjelman osat. 14: #include <iostream.h> 15: 16: int main() 17: {

Osoittimet ja taulukot

Harjoitustyö: virtuaalikone

AS C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin

Ohjelmoinnin peruskurssi Y1

Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 6: Python

Loppukurssin järjestelyt

Tietorakenteet ja algoritmit

TIETORAKENTEET JA ALGORITMIT

Loppukurssin järjestelyt C:n edistyneet piirteet

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

Modulaarisessa ohjelmoinnissa jaetaan ohjelma osiin (moduuleihin), jotka ovat yksinkertaisia ja lyhyitä.

// Tulostetaan double-tyyppiseen muuttujaan "hinta" tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf("%.1f euros.

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

#include <stdio.h> // io-toiminnot. //#define KM_MAILISSA int main( ){

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

Sisältö. Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2

1.1 Pino (stack) Koodiluonnos. Graafinen esitys ...

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

Tietorakenteet ja algoritmit

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Poikkeukset ja tietovirrat: Virhetilanteiden ja syötevirtojen käsittely

Sisältö. Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

Javan perusteet. Ohjelman tehtävät: tietojen syöttö, lukeminen prosessointi, halutun informaation tulostaminen tulostus tiedon varastointi

Ohjelmointi 1 Taulukot ja merkkijonot

Listarakenne (ArrayList-luokka)

TIEA341 Funktio-ohjelmointi 1, kevät 2008

Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 26.2

Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta.

Harjoitus 4 (viikko 47)

Esimerkki luokkahierarkiasta: C++-kielen IOstream-kirjasto

C++ rautaisannos. Kolme tapaa sanoa, että tulostukseen käytetään standardikirjaston iostreamosassa määriteltyä, nimiavaruuden std oliota cout:

Java-kielen perusteet

if-lauseen yksinkertaisin muoto on sellainen, missä tietyt lauseet joko suoritetaan tai jätetään suorittamatta.

Modulaarinen ohjelmointi Kertaus osoittimista

// Tulostetaan double-tyyppiseen muuttujaan "hinta" tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf("%.1f euros.

Tiedostokahva (filehandle) Tekstitiedostot. Tiedoston avaaminen. Tiedoston käyttötavat. Tekstitiedostot ja niiden käyttö. C-ohjelmointi, syksy 2008

Tekstitiedostot ja niiden käyttö

OPINTOJAKSON OHJELMOINTI HARJOITUSTEN RATKAISUJA

7. Näytölle tulostaminen 7.1

Tiedostokahva (filehandle) Tekstitiedostot. Tiedoston avaaminen. Tiedoston käyttötavat. Tekstitiedostot ja niiden käyttö. C-ohjelmointi, kevät 2006

13 Operaattoreiden ylimäärittelyjä

ehdollinen kääntäminen

Tekstitiedostot ja niiden käyttö

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

ehdollinen kääntäminen

Taulukot. Taulukon määrittely ja käyttö. Taulukko metodin parametrina. Taulukon sisällön kopiointi toiseen taulukkoon. Taulukon lajittelu

Attribuuttikieliopit

Ohjelmoinnin perusteet Y Python

Transkriptio:

Tiedosto yhteenkuuluvien tietojen joukko, joka on tavallisesti talletettu pysyväismuistiin muodostuu tietueista, jotka voivat olla keskenään samanlaisia tai vaihdella tyypiltään tiedostot ovat joko tekstitiedostoja tai binääritiedostoja tiedosto voi olla peräkkäistiedosto tai suorasaantitiedosto myös näppäimistösyötettä ja tulostusta näytölle voidaan käsitellä peräkkäistiedostona Tiedosto jatkossa käsitellään vain peräkkäistiedostoja, joiden tietuerakenne on (yleensä) kiinteä C-ohjelman käsittelemät tiedostot voidaan käsittää syöte- ja tulostusvirroiksi, jotka liitetään fyysisiin tiedostoihin ja/tai laitteisiin tietovirta (stream) on EOF-merkkiin päättyvä järjestetty jono tavuja oletustietovirrat stdin - syötevirta, oletuksena näppäimistö stdout - tulostus, oletuksena näyttö stderr - virheilmoitukset, oletuksena näyttö 1 T0004 Olli Hämäläinen www.evtek.fi 2 T0004 Olli Hämäläinen www.evtek.fi tiedostojen käsittely perustuu kirjastofunktioihin (stdio.h) tiedosto määritelllään C-ohjelmassa ottamalla käyttöön osoitin tiedoston kuvaajaan (tyyppiä FILE), esim. FILE *tiedosto1; osoitin liitetään todelliseen fyysiseen tiedostoon avaamalla tiedosto: tiedosto1=fopen(tiedoston_koko_nimi,avaustapa); esim. tiedosto1=fopen( d:\\temp\\ohje.txt, r ); 3 T0004 Olli Hämäläinen www.evtek.fi jokainen käsiteltävä tiedosto (oletusvirtoja lukuunottamatta) on avattava ennen käyttöä avaustapa kertoo, miten tiedostoa käytetään: r - avataan tekstitiedosto lukemista varten r+ - avataan tiedosto päivitystä varten w - luodaan uusi tai tyhjennetään olemassa oleva tekstitiedosto kirjoittamista varten w+ - luodaan uusi tai tyhjennetään olemassa oleva tiedosto päivitystä varten. a - avataan tekstitiedosto lisäystä varten a+ - avataan tai luodaan uusi tiedosto päivitettäväksi 4 T0004 Olli Hämäläinen www.evtek.fi jos tiedosto on binäärinen, lisätään avauskoodin perään b, siis: rb, wb, ab tiedosto-osoitin (tiedostopointteri) osoittaa kulloinkin käsiteltävään tiedoston kohtaan avauksen jälkeen tiedosto-osoitin osoittaa kirjoitustilassa ( w ) ja lukutilassa ( r ) tiedoston alkuun lisäystilassa ( a ) tiedoston loppuun kun tiedosto avataan kirjoitustilassa, sen aikaisempi sisältö katoaa 5 T0004 Olli Hämäläinen www.evtek.fi kun käsittely on päättynyt, tiedosto on suljettava funktiolla fclose, esim. tulos=fclose(tiedosto1); tiedoston sulkeminen aiheuttaa puskurien kirjoittamisen tiedostoon ja fyysisen tiedoston vapauttamisen tiedosto voidaan myös tuhota tai nimetä uudelleen C-ohjelmasta käsin funktioilla remove ja rename, esim. rename( a:\\vanha.txt, a:\\uusi.txt ); 6 T0004 Olli Hämäläinen www.evtek.fi 1

1. merkkien luku ja kirjoitus 2. rivien luku ja kirjoitus 3. muotoiltu luku ja kirjoitus 4. binäärinen luku ja kirjoitus Standardituloste- ja syöttötietovirtoja varten on joukko funktioita, joissa käsiteltävä tietovirta on sisäänrakennettuna itse funktiossa: putchar - tulostaa yhden merkin puts - tulostaa merkkijonon printf - tulostaa muotoillun merkkijonon getchar - lukee yhden merkin gets - lukee merkkijonon scanf - lukee muotoiltua tietoa 7 T0004 Olli Hämäläinen www.evtek.fi 8 T0004 Olli Hämäläinen www.evtek.fi kaikkia tietovirtoja (myös standarditietovirtoja) voidaan käsitellä standardikirjaston funktioilla, joissa käsiteltävä tietovirta annetaan parametrina tyypillisesti näiden funktioiden nimet alkavat pienellä f-kirjaimella tiedoston päättymistä voidaan luettaessa tutkia funktiolla feof (EOF = end of file) Merkkien luku ja kirjoitus fgetc - funktiolla (stdio.h) luetaan yksi merkki tietovirrasta: int fgetc(file *stream); int getc(file *stream); int getchar(); /* stdin-tietovirta */ fgetc palauttaa luetun merkin tai tiedoston loppuessa arvon EOF, jonka lukuarvo on -1 9 T0004 Olli Hämäläinen www.evtek.fi 10 T0004 Olli Hämäläinen www.evtek.fi Merkkien luku, esimerkki FILE *stream; int ch; /* HUOM! int, ei char */ stream = fopen("tied1.txt", "r"); do ch = fgetc(stream); fputc(ch,stdout); while (ch!= EOF); fclose(stream); 11 T0004 Olli Hämäläinen www.evtek.fi Merkkien luku, esimerkki 2 (SS 19.1) #include <stdlib.h> /* PŽŽOHJELMA***********************/ FILE *in, *out; char ch; if ((in=fopen("\\autoexec.bat", "r")) ==NULL) printf ("Sy tt tiedoston avaus ei onnistu "); exit (-1); /* lopetetaan ohjelman toiminta ja palautetaan DOS-tasolle virhekoodi -1*/ 12 T0004 Olli Hämäläinen www.evtek.fi 2

Merkkien luku, esimerkki 2 if ((out=fopen("\\autoexec.bak","w"))==null) printf("tulostiedoston avaus ei onnistu.\n"); exit(-1); ch = fgetc(in); while (!feof(in)) fputc(ch, out); ch = fgetc(in); fclose(in); fclose(out); 13 T0004 Olli Hämäläinen www.evtek.fi Merkkien luku ja kirjoitus fputc - funktiolla (stdio.h) kirjoitetaan yksi merkki tietovirtaan: int fputc(int c, FILE *stream); int putc(int c, FILE *stream); int putchar( int c );/* stdout-tietovirta */ fputc palauttaa nollan kun merkin kirjoitus onnistui ja muuten EOF. 14 T0004 Olli Hämäläinen www.evtek.fi Merkkien kirjoitus, esimerkki char msg[] = "Hello world"; int i = 0; while (msg[i]) fputc(msg[i], stdout); i++; Rivien luku ja kirjoitus fgets - funktio lukee yhden rivin tiedostosta rivi päättyy DOS-tiedostoissa CR ja LF merkkeihin, jotka muuntuvat luettaessa rivinvaihtomerkiksi '\n funktion fgets prototyyppi: char *fgets(char *s, int n, FILE *stream); n kertoo luettavien merkkien maksimilukumäärän, lukeminen päättyy joka tapauksessa rivinvaihtomerkkiin gets - funktio lukee yhden rivin standardisyötevirrasta ja muuttaa rivinvaihdon \0 :ksi char *gets(char *buffer); /*stdin-tietovirta*/ 15 T0004 Olli Hämäläinen www.evtek.fi 16 T0004 Olli Hämäläinen www.evtek.fi Rivien luku, esimerkki int main(int argc, char *argv[] ) FILE *stream; char mjono[200]; if ((stream = fopen(argv[1], "r"))!=null) while ( fgets( mjono, 200, stream ) ) printf( "%s", mjono ); Rivien luku ja kirjoitus fputs - funktio kirjoittaa merkkijonon tiedostoon: int fputs(const char *s, FILE *stream); merkkijonon päättävä nollatavu ei kirjoitu tiedostoon myöskään mitään rivinvaihtomerkkejä ei kirjoiteta tiedostoon onnistuessaan fputs palauttaa nollan, muuten jonkin nollasta poikkeavan arvon puts - funktio kirjoittaa stdout-tietovirtaan (standarditulostustietovirta) merkkijonon, jonka nollatavu korvataan rivinvaihtomerkillä '\n : int puts(const char *string); /* stdout */ 17 T0004 Olli Hämäläinen www.evtek.fi 18 T0004 Olli Hämäläinen www.evtek.fi 3

Rivien kirjoitus, esimerkki fputs("tiedon puussa asuu kyy:\n", stdout); fputs("joka sit\204 l\204hestyy\n", stdout); fputs("ikuisesti onneton\n", stdout); fputs("ep\204ilyksen uhri on.\n", stdout); fputs("autuas ken omin p\204in\n", stdout); fputs("el\204\204, kuolee lailla t\204in.\n", stdout); puts("\n\nlauri Viita"); Muotoiltu luku ja kirjoitus printf -jascanf - funktioista on olemassa vastaavat funktiot fprintf ja fscanf, joissa tietovirta annetaan parametrina: int fscanf( FILE *stream, const char *format[, address,...]); int fprintf( FILE *stream, const char *format[, argument,...]); fprintf- ja fscanf-funktioiden yhteydessä käytettävät muotoilumääreet ovat samat kuin printf- ja scanffunktioiden yhteydessä 19 T0004 Olli Hämäläinen www.evtek.fi 20 T0004 Olli Hämäläinen www.evtek.fi muun kuin tekstitiedon, esim. itse määritellyn tietuetyypin mukaisten tietuieiden tallettamiseen käytetään binääritiedostoja binääritiedostojen lukemiseen käytetään funktiota fread ja kirjoittamiseen fwrite yhdellä operaatiolla voidaan kerralla lukea tai kirjoittaa yksi tai useampia lohkoja lohkon koko voi olla yksi tai useampi tavu funktioiden prototyypit: size_t fread( void *puskuri, size_t lohkon_koko, size_t lohkojen_lkm, FILE *tietovirta); size_t fwrite( const void * puskuri, size_t lohkon_koko size_t lohkojen_lk FILE *tietovirta); 21 T0004 Olli Hämäläinen www.evtek.fi 22 T0004 Olli Hämäläinen www.evtek.fi puskuri osoittaa sen muuttujan johon luettu tieto sijoitetaan tai josta kirjoitettava tieto otetaan lohkon_koko ilmoittaa yhden luettavan tai kirjoitettavan lohkon koon tavuina lohkojen_lkm ilmoittaa kuinka monta lohkoa luetaan tai kirjoitetaan yhdellä kertaa fread palauttaa onnistuneesti luettujen lohkojen lukumäärän fwrite palauttaa onnistuneesti kirjoitettujen lohkojen lukumäärän Binäärinen kirjoitus, esimerkki #include <string.h> typedef struct char nimi[20]; int ika; double paino; HENKILO_TIETUE; 23 T0004 Olli Hämäläinen www.evtek.fi 24 T0004 Olli Hämäläinen www.evtek.fi 4

Binäärinen kirjoitus, esimerkki FILE *f1; double pii=3.141592; int luku= 374; char rivi[]="tämä on merkkijono\n"; HENKILO_TIETUE h1="antti",32,75.3; int lkm=strlen(rivi)+1; f1=fopen("bin.dat","wb"); fwrite(&h1,sizeof(h1),1,f1); fwrite(&pii,sizeof(pii),1,f1); fwrite(&lkm,sizeof(lkm),1,f1); fwrite(rivi,lkm,1,f1); fclose(f1); 25 T0004 Olli Hämäläinen www.evtek.fi Binäärinen luku, esimerkki typedef struct char nimi[20]; int ika; double paino; HENKILO_TIETUE; FILE *f1; double pii; int luku, lkm; char rivi[100]; HENKILO_TIETUE h1; 26 T0004 Olli Hämäläinen www.evtek.fi f1=fopen("bin.dat","rb"); fread(&h1,sizeof(h1),1,f1); fread(&pii,sizeof(pii),1,f1); fread(&luku,sizeof(luku),1,f1); fread(&lkm,sizeof(lkm),1,f1); fread(rivi,lkm,1,f1); fclose(f1); printf("henkilö nimi=%s\n",h1.nimi); printf("henkilö ikä=%i\n",h1.ika); printf("henkilö paino=%lf\n",h1.paino); printf("pii=%lf\n",pii); printf("luku=%i\n",luku); printf("rivi=%s\n",rivi); 27 T0004 Olli Hämäläinen www.evtek.fi 5