13B - Gegevens opslaan in een txt file - mg (te uitgebreid!)

Gegevens opslaan in een txt file
Programming C# - II
Week 13B

1 / 33
volgende
Slide 1: Tekstslide
Applicatie- en mediaontwikkelaarMBOStudiejaar 1

In deze les zitten 33 slides, met interactieve quizzen en tekstslides.

time-iconLesduur is: 90 min

Onderdelen in deze les

Gegevens opslaan in een txt file
Programming C# - II
Week 13B

Slide 1 - Tekstslide

Deze slide heeft geen instructies

Wat gaan we doen
  • Thema: tekstbestanden
  • Vereiste voorkennis doornemen
  • Introductie bestanden aanmaken / schrijven
  • Verschillende soorten bestanden
  • Methodes schrijven naar bestand
  • Demo + Oefenopdracht gezamelijk en zelfstandig

Slide 2 - Tekstslide

Deze slide heeft geen instructies

Waarom bestanden?

Slide 3 - Open vraag

Deze slide heeft geen instructies

Waarom
  • Interactie met de 'buitenwereld'
  • Rapporten / koppelingen / serialisatie (?)
  • Eenvoudige introductie van werken met streams
  •     Streams worden overal gebruikt maar kunnen soms             complex zijn. 

Slide 4 - Tekstslide

Deze slide heeft geen instructies

Hoe
  • Doornemen van de voorkennis (PRC-1)
  • Doornemen van de theorie
  • Demonstratie
  • Gezamelijk stap-voor-stap applicatie maken
  • Zelf eenvoudige applicatie maken
  • Zelf iets complexere applicatie maken

Slide 5 - Tekstslide

Deze slide heeft geen instructies

Wat ken je al (voorkennis)
  • Types (classes) maken en gebruiken
  • Methodes maken en gebruiken
  • Datatypes / variabelen / instanties (objects)
  • Controle statements (if else / case / ...)
  • Collections (Array / List / ...)
  • Iteraties (Loops: for / while / foreach)

Slide 6 - Tekstslide

Deze slide heeft geen instructies

Wat ken je al (2)
  • Staan er in de vorige slide nog onbekende dingen?
  • Dan is nu het moment om dat aan te geven en wat extra tijd in te plannen om dat bij te spijkeren!
  • Maar vooral VEEL doen en experimenteren!

Slide 7 - Tekstslide

Deze slide heeft geen instructies

Een bestand is ...

Slide 8 - Open vraag

Deze slide heeft geen instructies

Een bestand is ...
  • een bak met bytes (of zijn het bits?) in een stukje geheugen
  • en tegelijk: een geordende verzameling van gegevens in elek. vorm
  • beheerd door het bestandssysteem (fat/vfat/ntfs/ext4/reiserfs/ZFS)
  • benaderbaar onder één naam (maar ...)
  •   links / junctions / snapshots (BtrFS) / delta's (ZFS)

Slide 9 - Tekstslide

Deze slide heeft geen instructies

een verzameling bytes
68 6f 69 2c 20 69 6b 20 62 65 6e 20 65 65 6e 20 74 65 6b 73 74 62 65 73 74 61 6e 64  

Slide 10 - Tekstslide

Deze slide heeft geen instructies

een geordende verzameling van gegevens
hoi, ik ben een tekstbestand  

Slide 11 - Tekstslide

Deze slide heeft geen instructies

Binair vs text
  • Gigantisch veel soorten bestanden
  • Vanuit C#'s oogpunt maar twee soorten:
  •     binair
  •     text
  • Komende lessen alleen text varianten

Slide 12 - Tekstslide

Deze slide heeft geen instructies

Te[x|ks]t dus...
  • Eenvoudig?
  • Zoals gebruikelijk: 'It depends'
  • Voor groot deel afhankelijk van de gebruikte encoding

Slide 13 - Tekstslide

Deze slide heeft geen instructies

Encoding
  • Vertalen karakters naar bytes en andersom
  • Is relevant!
  • Veel verschillende methoden
  • Was afhankelijk van OS / chip architectuur (BE / LE)
  • Bij inlever opdrachten kun je het nog even negeren
  • (default wordt tegenwoordig UTF8 gebruikt)

Slide 14 - Tekstslide

Deze slide heeft geen instructies

Te[x|ks]t dus (2)...
  • Dus eenvoudig?
  • ASCII -> Ja 
  • Unicode (UTF-[8|16|...]) -> Hmm...
  •   Complexere verwerking (bij UTF8 bv de BOM + aantal bytes)
  •   Meer geheugen
  •   Maar noodzakelijk i.v.m. globalisering
  •   ASCII: 7 bits, 2^7 -> 128, UTF8: 1-4 bytes -> 1.112.064
(met wat oefenen kun je hex waardes prima lezen als tekst)

Slide 15 - Tekstslide

Deze slide heeft geen instructies

Tot zover...
  • De theorie
  • Details hoef je niet te weten, maar...
  •   HIER GA JE VROEG OF LAAT TEGENAAN LOPEN

Slide 16 - Tekstslide

Deze slide heeft geen instructies

.Net strings
  • UTF-16 encoding
  • char type is 1 byte
  • 'a' --> 8 bits == 1 byte

Slide 17 - Tekstslide

Deze slide heeft geen instructies

Hoeveel bytes neemt de volgende string in: "a"
A
1
B
2
C
22
D
16

Slide 18 - Quizvraag

20+(n/2)*4 bytes
(n/2) naar beneden afronden
zie Jon Skeet's blogpost https://csharpindepth.com/Articles/Strings
.net strings (intern)
(n/2) naar beneden afronden

Slide 19 - Tekstslide

Deze slide heeft geen instructies

Twee (...) methodes
File.WriteAllText(<pad>,<tekst>[, encoding]);
File.WriteAllLines(<pad><collectie met tekst> [,encoding]);
File.AppendAllText(<pad>,<tekst>[, encoding]);
File.AppendAllLines(<pad><collectie met tekst> [,encoding]);
var sw = new StreamWriter(<pad> [, append, encoding]);
sw.WriteLine(<tekst>);
sw.Write(<tekst>);
  • Static class
  • Kan ook alle overweg met IEnumerable collecties
  • Instantie nodig
  • Is generieker (zie constructor mogelijkheden)

Slide 20 - Tekstslide

Deze slide heeft geen instructies

Huh?!?
  • Instantie / object vs static
  • Type / class --> wordt vaak door elkaar gebruikt
  • Collection / IEnumerable (of IEnumerable<T>)
  •     Lijsten zoals Array of List<T>

Slide 21 - Tekstslide

Deze slide heeft geen instructies

                                   Direct (alles of niets)

using System.IO;
...
File.WriteAllText(@"c:\temp\test.txt", "bla bla bla);
File.WriteAllLines(@"c:\temp\test.txt", new [] {"regel 1", "regel 2"});

            Streams - StreamWriter (controle)

using System.IO;
...
var sw = new StreamWriter("c:\temp\test.txt")
sw.WriteLine("Bla bla");
sw.Write("Bla bla\r\n");
sw.Write($"Bla bla{Environment.NewLine}");

Slide 22 - Tekstslide

Deze slide heeft geen instructies

Streams - aandachtspunten
  • Flush() / AutoFlush
  • Close()
  • Encoding
  • NewLine
  •   handig als je bv wilt transposen (-> omzetten naar andere 'indeling')

Slide 23 - Tekstslide

Deze slide heeft geen instructies

Demo
  • File.Write en consorten
  • StreamWriter

Slide 24 - Tekstslide

Deze slide heeft geen instructies

Waarom niet altijd File.<methode>
  • File.WriteAll... alleen bestanden via filesystem
  • StreamWriter(-Reader) kan van alles benaderen
  •     sockets (netwerk), geheugen (RAM), console, ...
  • (File.<methode> is static dus geen stub / mock / DI mogelijk)
  •    (unittesten lastig als filesystem gebruikt wordt)

Slide 25 - Tekstslide

Deze slide heeft geen instructies

Gezamelijk aan de slag
  • Maken console applicatie 'schrijven naar tekst bestand'

Slide 26 - Tekstslide

Deze slide heeft geen instructies

Wanneer gebruik je de Flush() methode van een StreamWriter instantie?
A
Je bent klaar met schrijven en wilt de instantie sluiten
B
Er is geschreven naar de stream en je wilt dat direct beschikbaar hebben
C
In plaats van schrijven wil je nu van de stream gaan lezen
D
Als de buffer vol zit kan er niet meer geschreven worden. Flush maakt de buffer weer leeg.

Slide 27 - Quizvraag

Deze slide heeft geen instructies

Moet een instantie van StreamWriter altijd via de Close methode gesloten worden?
A
Ja
B
Nee
C
D

Slide 28 - Quizvraag

Nee, denk aan 'using' statement (impliciete Close / dispose).
Ik wil de tekst 'bla' scrijven naar 'c:\t\uit.txt'. Wat is correct?
A
File.WriteAllText("uit.txt"), "bla");
B
var f = new File(@"c:\t\uit.txt"); f.WriteAllText("bla");
C
new StreamWriter(@"c:\t\uit.txt").Write("bla");
D
var sw = new StreamWriter(@"c:\t\uit.txt"); sw.WriteLine("bla");

Slide 29 - Quizvraag

Deze slide heeft geen instructies

Zelfstandig aan de slag (1)
  • Maken WinForms applicatie
  • Beide methodes
  • File.Write(...)
  • StreamWriter ...
  • (je kunt template solution gebruiken of van scratch beginnen)
  • https://catnipderby.nl/FileWritingStub.zip

Slide 30 - Tekstslide

Deze slide heeft geen instructies

Vragen n.a.v. opdracht

Slide 31 - Tekstslide

Deze slide heeft geen instructies

Zelfstandig aan de slag (2)
Maak een applicatie die tekstregels:
  • Naar twee bestanden schrijft
  • Eén in ASCII encoding
  • Eén in UTF8 encoding
  • De tekstregels bevatten bedragen in de vorm van €<bedrag>
  • b.v. "de deegrol kost €10,50"


Slide 32 - Tekstslide

Deze slide heeft geen instructies

Bedankt!
  • Vragen
  • Volgende les

Slide 33 - Tekstslide

Deze slide heeft geen instructies