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

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

1 / 33
suivant
Slide 1: Diapositive
Applicatie- en mediaontwikkelaarMBOStudiejaar 1

Cette leçon contient 33 diapositives, avec quiz interactifs et diapositives de texte.

time-iconLa durée de la leçon est: 90 min

Éléments de cette leçon

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

Slide 1 - Diapositive

Cet élément n'a pas d'instructions

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 - Diapositive

Cet élément n'a pas d'instructions

Waarom bestanden?

Slide 3 - Question ouverte

Cet élément n'a pas d'instructions

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 - Diapositive

Cet élément n'a pas d'instructions

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 - Diapositive

Cet élément n'a pas d'instructions

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 - Diapositive

Cet élément n'a pas d'instructions

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 - Diapositive

Cet élément n'a pas d'instructions

Een bestand is ...

Slide 8 - Question ouverte

Cet élément n'a pas d'instructions

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 - Diapositive

Cet élément n'a pas d'instructions

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 - Diapositive

Cet élément n'a pas d'instructions

een geordende verzameling van gegevens
hoi, ik ben een tekstbestand  

Slide 11 - Diapositive

Cet élément n'a pas d'instructions

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

Slide 12 - Diapositive

Cet élément n'a pas d'instructions

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

Slide 13 - Diapositive

Cet élément n'a pas d'instructions

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 - Diapositive

Cet élément n'a pas d'instructions

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 - Diapositive

Cet élément n'a pas d'instructions

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

Slide 16 - Diapositive

Cet élément n'a pas d'instructions

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

Slide 17 - Diapositive

Cet élément n'a pas d'instructions

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

Slide 18 - Quiz

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 - Diapositive

Cet élément n'a pas d'instructions

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 - Diapositive

Cet élément n'a pas d'instructions

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 - Diapositive

Cet élément n'a pas d'instructions

                                   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 - Diapositive

Cet élément n'a pas d'instructions

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

Slide 23 - Diapositive

Cet élément n'a pas d'instructions

Demo
  • File.Write en consorten
  • StreamWriter

Slide 24 - Diapositive

Cet élément n'a pas d'instructions

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 - Diapositive

Cet élément n'a pas d'instructions

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

Slide 26 - Diapositive

Cet élément n'a pas d'instructions

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 - Quiz

Cet élément n'a pas d'instructions

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

Slide 28 - Quiz

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 - Quiz

Cet élément n'a pas d'instructions

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 - Diapositive

Cet élément n'a pas d'instructions

Vragen n.a.v. opdracht

Slide 31 - Diapositive

Cet élément n'a pas d'instructions

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 - Diapositive

Cet élément n'a pas d'instructions

Bedankt!
  • Vragen
  • Volgende les

Slide 33 - Diapositive

Cet élément n'a pas d'instructions