Programmering i C++ EDA623 Strömmar och filer. EDA623 (Föreläsning 9) HT / 19

Relevanta dokument
4. Standard-containers. Strömmar och filer

Innehåll. 1 Algoritmer. 2 Strömmar och filer. 3 Iteratorer. 1 Söka, räkna. 2 Jämföra, genomlöpa. 3 Generera nya data. 4 Kopiera och flytta element

TDIU01 (725G67) - Programmering i C++, grundkurs

TDIU01 - Programmering i C++, grundkurs

6 In- och utmatning, strömmar

Filhantering. Grunderna i filhantering. Uppbyggnad av filer. Data hierarkin. Filpekaren. Positionering i filer

Föreläsning 4: Filer och strömmar

C++ Lektion Filhantering

C++ - En introduktion

TDDC76 - Programmering och Datastrukturer

Avrundning och manipulatorer

C++ - En introduktion

Del6 Strömmar Ämnesområden denna föreläsning:

Introduktionslaboration

Introduktion till streams

Programmering i C++ EDAF hp. EDAF30 (Föreläsning 2) HT / 18

Föreläsning 1: Momstabellen i C++

Kapitel 5. Strömmar. Utmatning

LÖSNINGSFÖRSLAG TILL Tentamen i objektorienterad programmering i C++ I

Introduktionslaboration

FÖRSLAG TILL LÖSNING AV Tentamen i Objektorienterad programmering C++ I

TDIU01 - Programmering i C++, grundkurs

Innehåll. Introduktion till objektorientering. OOP (objektorienterad programmering) Objekt, instanser, klasser

Strömmar och strängar

TDIU01 - Datortenta (DAT2)

TDIU01 - Datortenta (DAT2)

TDIU01 - Programmering i C++, grundkurs

Innehåll. 1 Deklarationer, scope och livstid. 2 Användardefinierade typer. 4 Operatoröverlagring. 5 In- och utmatning. 6 namnrymder (namespace)

Imperativ programmering (Fö 1 2) C++ Ett första programexempel. Enkel in- och utmatning strömbiblioteket

TDIU01 Programmering i C++

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

TDIU01 - Programmering i C++, grundkurs

Programmering i C++ EDA623 Arv. EDA623 (Föreläsning 6) HT / 42

ÖREBRO UNIVERSITET. Lösningarna till tentamensuppgifterna sätts ut på kurssidan på nätet i dag kl 13.

TDIU01 - Programmering i C++, grundkurs

Programmering i C++ EDA623 Typer. EDA623 (Föreläsning 4) HT / 33

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Innehåll. 1 Deklarationer, scope och livstid. 2 Användardefinierade typer. 4 In- och utmatning. 5 Operatoröverlagring. 6 namnrymder (namespace)

EDAf30: Programmering i C++, 7.5 hp. EDAf30: Programmering i C++, 7.5 hp Administration. EDAf30: Programmering i C++, 7.5 hp Obligatoriska moment

Tentamen i Objektorienterad Programmering 5p, Au, D, Fri, Pr,

Övning från förra gången: readword

C++ Funktioner 1. int summa( int a, int b) //funktionshuvud { return a+b; //funktionskropp } Värmdö Gymnasium Programmering B ++ Datainstitutionen

TDDB28 OH Föreläsning: C++ 1

Objektorienterad programmering Föreläsning 11. Copyright Mahmud Al Hakim

Tecken. char. char ch = A ; sizeof(char) = 1 byte (ej 16-bitars tecken som i Java) char namn[]= "Nils"; // längd = 5 bytes

Programmering i C++ EDA623 Mer om klasser. EDA623 (Föreläsning 6) HT / 26

En ström är en klass som representerar en bytesekvens med data. I C++ finns flera typer av strömmar, men de går alla al använda på samma säl.

Nedan skapar vi klassen Person innehållande datamedlemmar för förnamn, efternamn, ålder, längd och vikt:

C++ Lektion Tecken och teckenfält

Grunderna i C++ T A. Skapad av Matz Johansson BergströmLIMY

Standardfilerna Input och Output

Standardfilerna Input och Output. Filer... Filer... vanlig utbyggnad för ökad dynamik. Filer... filtyper

Föreläsning 13. In- och utmatning

Enkla datatyper minne

TDIU20 - Objektorienterad programmering i c++ - föreläsning 3

Enklast att skriva variabelnamn utan ; innehåll och variabelnamn skrivs ut

Frågor TDP004. ExaminaBon. KursinformaBon. Tid i kursen. Tid i kursen Första chansen Bll frågor.

TDDC76 PoD OH Föreläsning C++ 1 C++

Programmering i C++ EDA623 Mallar. EDA623 (Föreläsning 12) HT / 29

Strängar. Strängar (forts.)

DD2387 Programsystemkonstruktion med C++ Tentamen 2

TDIU01 - Programmering i C++, grundkurs

Operatoröverlagring. endast operatorsymboler definierade i C++ kan överlagras = += -= *= /= %= ^= &= = <<= >>= < > <= >= ==!= && > ->*, [ ] ( )

Programmeringsteknik med C och Matlab

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Högskolan Dalarna sid 1 av 5 Data-avdelningen Hans-Edy Mårtensson

Tentamen Objektorienterad Programutveckling med C++

Innehåll. 1 Typer. 2 C-strängar. 3 union. 4 Bitoperationer. 5 Komma-operatorn. struct Foo; void print ( const Foo& f) } void print (int i)

7 Templates och Exceptions

JAVAUTVECKLING LEKTION 7

Programsystemkonstruktion med C++: Övning 2. Karl Palmskog september 2010

Deklarera en struct som kan användas för att representera en rät linje

Grunderna i C++ T A. Skapad av Matz Johansson BergströmLIMY

Innehåll. Heltalstyper. Heltalstyper. Heltalstyper Storlekarna specificeras i <climits>

Tentamen EDAF30 Programmering i C++

C++ Slumptalsfunktioner + switch-satsen

ÖREBRO UNIVERSITET. Lösningarna till tentamensuppgifterna sätts ut på kurssidan på nätet i dag kl 19.

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

Objektorienterad Programmering (TDDC77)

5 Grundläggande in- och utmatning

Innehåll. Exceptionella händelser (exceptions, undantag ) Felhantering Tre nivåer av felhantering: Nivå 2: exceptions (eller returvärde)

Objektorienterad Programmering (TDDC77)

Dagens föreläsning. Specialtecken. Mer om printf. Formateringssträngar. Mer om scanf. Programmeringsteknik för Ingenjörer VT05

TDIU20 - Objektorienterad programmering i c++ - föreläsning 4

C++ Objektorientering - Klasser. Eric Elfving Institutionen för datavetenskap

TDDI14 Objektorienterad programmering

Programmering i C++ EDA623 Containerklasser och algoritmbibliotek. EDA623 (Föreläsning 10) HT / 33

Läsning, skrivning, tangentbord, skärm. F6: Filhantering (kap. 8) Tabell på skärmen. save

Sammanfattning. Listor. List-manipulering. Matris. /home/lindahlm/activity-phd/teaching/11dd1310/exercise3/exercise3.py September 13, 20111

Programmering i C++ EDA623 Objektorienterad programutveckling. EDA623 (Föreläsning 5) HT / 33

"Referentiell transparens"

Användning av typeid. Operatorerna typeid och. Filen typeinfo.h måste inkluderas. typeid

1 Texthantering. 1.1 Typen char. Exempel, skriv ut alfabetet

TENTAMEN CD5250. Objektorienterad programutveckling med C++, 5p. Datum: , Tid: 14:00-19:00

Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Omtentamen i Programmering C, 5p, fristående, kväll,

Typkonvertering. Java versus C

TDP002 - Imperativ programmering

En villkorssats är den konstruktion som finns i C++ för att göra en selektion av två alternativa sekvenser. Formen för if satsen är

Innehåll. Pekare Syntax

TDDC76 - Programmering och Datastrukturer

Transkript:

Programmering i C++ EDA623 Strömmar och filer EDA623 (Föreläsning 9) HT 2013 1 / 19

Strömmar och filer Innehåll Klassen ios Läsning av strömmar Utskrift av strömmar Koppling av filer till strömmar Direktaccess EDA623 (Föreläsning 9) HT 2013 2 / 19

Klassen ios Ström (stream) = Följd av tecken (bytes) Grundläggande klass för strömmar: ios Klassträd för strömmar ifstream istream ios iostream iostrm fstream ostream ofstream EDA623 (Föreläsning 9) HT 2013 3 / 19

Klassen ios Fördefinierade strömmar deklarerade i <iostream>: cin, cout, cerr, och clog Klasser deklarerade i inkluderingsfilen: <fstream>: ifstream, ofstream, fstream Flaggor definierade i ios, vilka beskriver en ströms tillstånd: failbit Senaste operationen misslyckades eofbit Ett filslut påträffades vid senaste operationen badbit Ett allvarligare fel av intern art har inträffat EDA623 (Föreläsning 9) HT 2013 4 / 19

Klassen ios Medlemsfunktioner i klassen ios: void clear(); bool good(); bool fail(); bool eof(); bool bad(); bool operator!(); Slår av alla tillståndsflaggorna Ger true om alla flaggor false Ger true om failbit el. badbit satt Ger true om eofbit är satt Ger true om badbit är satt Ger resultatet fail() EDA623 (Föreläsning 9) HT 2013 5 / 19

Klassen ios Inläsning tecken för tecken char c; // Felaktigt sätt: while (!cin.eof()) { cin.get(c); //... } // Läser 2 tecken för mycket (LF och EOF) // Korrekt sätt: while (cin.get(c)) { //... } // Läser rätt antal tecken EDA623 (Föreläsning 9) HT 2013 6 / 19

Läsning av strömmar Strömmar från klassen istream eller från subklass till denna Oformaterad inmatning: Läser data från strömmen utan att konvertera till annat format Görs via medlemsfunktioner Formaterad inmatning: Data från strömmen görs om till annat format Görs med operatorn >> EDA623 (Föreläsning 9) HT 2013 7 / 19

Läsning av strömmar Formaterad inmatning med >> // Kodavsnitt string avr_ort; int dag, manad; cout << "Ange avreseort, dag och månad: "; cin >> avr_ort >> dag >> manad; cout << "Avresa från " << avr_ort << " den " << dag << / << manad << endl; // In- och utmatning Ange avereseort, dag och månad: Lund 24 10 Avresa från Lund den 24/10 EDA623 (Föreläsning 9) HT 2013 8 / 19

Läsning av strömmar Manipulatorer vid inmatning: setw(n) Max-antalet tecken i inläsningssträngen ws Hoppa fram till nästa icke-vita tecken skipws Hoppa över inl. vita tecken vid anv av >> noskipws Hoppa ej över inl. vita tecken vid anv av >> dec Tolka följande heltal som decimalt oct Tolka följande heltal som oktalt hex Tolka följande heltal som hexadecimalt boolalpha Indata för bool på formen false / true noboolalpha Indata för bool på formen 0 / 1 EDA623 (Föreläsning 9) HT 2013 9 / 19

Läsning av strömmar Formaterad inmatning med >> och manipulatorer // Kodavsnitt #include <iomanip> int i, j, k; cout "Ange tre heltal: " cin >> oct >> i >> hex >> j >> k; cout << i << " " << j << " " << k << endl; // In- och utmatning Ange tre heltal: 12 34 56 10 52 56 EDA623 (Föreläsning 9) HT 2013 10 / 19

Läsning av strömmar Oformaterad inmatning med medlemsfunktioner gcount() get() get(c) getline(s, n, t) get(s, n, t) read(s, n) ignore(s, t) peek() putback(c) unget() Anger antalet tecken vid senaste inläsn. Läser in och returnerar nästa tecken Läser in tecken till c Läser n tecken till s med t som radseparator Som getline men sep. t läses ej Läser in n st tecken till s Hoppar över n st tecken vid inl till s Returnerar nästa tecken (som förblir oläst) Lägger tillbaka c i strömmen Lägger tillbaka senast lästa tecken EDA623 (Föreläsning 9) HT 2013 11 / 19

Utskrift till strömmar Formaterad utmatning med << cout << uppercase << "hej svejs" << endl; // ger utskriften hej svejs cout << uppercase << scientific << 123456789.0 << endl; // ger utskriften 1234568E+008 EDA623 (Föreläsning 9) HT 2013 12 / 19

Utskrift till strömmar Manipulatorer vid utmatning: uppercase fixed scientific hex oct dec setw(n) setfill(c) setprecision(n) setbase(n) flush endl Ger stort E vid flyttalsutskrift Utskrift med fixnotation Utskrift med flytnotation Utskrift som hexadecimalt tal Utskrift som oktalt tal Utskrift som decimalt tal Sätter minimalt antal positioner Anger tecken för utfyllnad (padding) Sätter antalet decimaler (om fixed) eller antalet sign. siffror (om scientific) setbase(16), setbase(8) osv Tömmer utskriftsbufferten Lägger in radslut i strömmen EDA623 (Föreläsning 9) HT 2013 13 / 19

Utskrift till strömmar Oformaterad utmatning med medlemsfunktioner put(c) write(s, n) flush() Skriv ut tecknet c till strömmen Skriv ut n tecken från fältet s Töm utskriftsbufferten EDA623 (Föreläsning 9) HT 2013 14 / 19

Koppling av filer till strömmar Öppnande av fil för läsning ifstream infil("infilen.txt"); // Alt. ifstream infil; infil.open("infilen.txt"); Öppnande av fil för skrivning ofstream utfil("utfilen.txt"); // Alt. ofstream utfil; utfil.open("utfilen.txt"); EDA623 (Föreläsning 9) HT 2013 15 / 19

Koppling av filer till strömmar Stängning av fil infil.close(); utfil.close(); Ofta behövs inte close användas eftersom destruktorerna för ifstream och ofstream automatiskt anropas då den associerade strömmen termineras EDA623 (Föreläsning 9) HT 2013 16 / 19

Koppling av filer till strömmar Kopiering av fil #include <iostream> #include <fstream> using namespace std; main (int argc, char* argv[]) { if (argc!= 3) { cout << "Syntax: " << argv[0] << " from_file to_file" << endl; } char c; ifstream f1(argv[1], ios::binary);//binärfil ofstream f2(argv[2], ios::binary); } while (f1.get(c)) // Snabbare sätt (via filbuffert): f2.put(c); // f2 << f1.rdbuf(); EDA623 (Föreläsning 9) HT 2013 17 / 19

Koppling av filer till strömmar Filflaggor i klassen ios in out app trunc ate binary Filen skall existera och vara läsbar. Om filen existerar skall den skrivas över. Om filen inte finns skall en ny skrivbar fil skapas. Om filen existerar skall skrivning läggas till i slutet. Om filen inte finns skall en ny skrivbar fil skapas. Om filen redan finns skall den skrivas över Efter öppning flyttas filpekaren till slutet av filen Filen skall hanteras som en binärfil Kombination av flaggor med operator (bitvis eller) ofstream filen("fil.dat",ios::trunc ios::binary); EDA623 (Föreläsning 9) HT 2013 18 / 19

Direktaccess Direkt indexering av filposition där index är av typen streampos (heltalstyp) is.tellg() os.tellp() is.seekg(pos) os.seekp(pos) is.seekg(off, dir) os.seekp(off, dir) Ger aktuell position i inströmmen is Ger aktuell position i utströmmen os Sätter aktuell position i is resp. os till pos (av typen streampos) Sätter positionen till off+dir där off är en (ev neg.) offset och dir är ios::beg (start), ios::end (slut) eller ios::cur (akt. pos.) EDA623 (Föreläsning 9) HT 2013 19 / 19