Lezen en schrijven van tekst

Slides:



Advertisements
Verwante presentaties
Het type int Tekenen met Java operatoren
Advertisements

Hoofdstuk 2 Hallo, C# !.
Inleidend probleem Data structuur (hiërarchie van classes)
Array nDeclaratie nCreatie nOpvragen nWijzigen nLengte String [ ] a; a = new String[10]; ……a[5]…… a[5] = ……; …a.Length… …is eigenlijk overbodig! List a;
Hoofdstuk 8.5 Subklassen. versie-management problematiek Voortborduren op eerder gedaan werk nEerste poging: “knip&plak” class Twee { int x, y; int oud.
Hoofdstuk 8 Objecten en klassen.
Consoletoepassing Variabelen Klassen
Opgave 2a nMet een InputStream lees je bytes uit een binare file nMet een Reader lees je characters uit een tekstfile.
Hoofdstuk 5 Interactie. Controls Form Label Button Label TextBox.
Hoofdstuk 11.3 Algoritmen: Zoeken in een netwerk.
Tircms03-p les 4 Klassen. Abstracte datatypes in C struct stack { char info[100]; int top; }; void reset(stack *s) { s->top = -1; } void push(stack *s,
Hoofdstuk 8.5 Subklassen. versie-management problematiek Voortborduren op eerder gedaan werk nEerste poging: “knip&plak” class Twee { int x, y; int oud.
Hoofdstuk 14.1 Algoritmen: Zoeken in een netwerk.
Hoofdstuk 10.3 Tekst-editor: MDI-interface Dialogen Files lezen Abstracte klassen.
Hoofdstuk 3 Methoden om te tekenen.
Over-erving nObjecten van een subklasse erven variabelen en methoden&properties van de superklasse kleiner straal CirkelGroei geërfd zelf gede- clareerd.
Java Objectgeoriënteerd Programmeren in Java met BlueJ
2e Deeltentamen nNagekeken werk ligt voor in de zaal (alfabetisch op achternaam) nOmcirkeld: tentamen2 Achter pijltje: gemiddelde tot nu toe nNeem het.
Reader en Writer Stream FileStream MemoryStream NetworkStream BufferedStream GZipStream CryptoStream TextWriter StreamWriter StringWriter BinaryWriter.
Programma opdrachten methoden klasse variabelen en Geheugen objecten klasse zijn gegroepeerd in hebben als type veranderen bewerken.
Hoofdstuk 2 Hallo, C# !. Opbouw broncode nOpdrachten om het geheugen te veranderen nOpdrachten zijn gegroepeerd in methoden nMethoden zijn gegroepeerd.
Gelijkheid van Strings static bool Gelijk( string s, string t) { } int m = s.Length; int n = t.Length; for (i=0; i
Eerste deeltentamen nNagekeken werk ligt voor in de zaal nNeem je eigen werk mee: in het college wordt het besproken nVragen over de beoordeling: in de.
1e Deeltentamen nNagekeken werk ligt voor in de zaal (alfabetisch op achternaam) nNeem het even mee, de uitwerking wordt in het college besproken nDiscussies.
Aangepaste timing nTheorie (16 colleges + 2 deeltentamens) nPraktijk (16 keer, 3 inleveropdrachten) college Tent. 1 Tent. 3 college prakt. 1 prakt. 3 prakt.
Resources. Kompas } { protected override void OnDraw(Canvas canv) { base.OnDraw(canv); } public KompasView(Context c) : base(c) { } class KompasView :
Windows-applicatie class HalloWin1 { static void Main ( ) { } Form scherm; scherm = new Form( ); Application.Run(scherm); using System.Windows.Forms; scherm.Text.
Opbouw van het Netwerk void Lees (string filenaam ) { while ( (regel=sr.ReadLine()) != null ) { string [] r = regel.Split(" ", StringSplitOptions.RemoveEmpty.
Exceptions Exception: nUitzonderlijke toestand die door een methode wordt opgeworpen nDe situatie moet door de aanroeper van de methode worden opgevangen.
Syntax van opdrachten opdracht (), ;expressie klasse naam object expressie. methode naam =expressie;variabele property naam += returnexpressie; if)(expressieopdrachtblok.
Meer constructormethodes in klasse Kleur { class Kleur } public byte Rood, Groen, Blauw; public Kleur( byte r, byte g, byte b ) { } Rood=r; Groen=g; Blauw=b;
Windows-applicatie using System.Windows.Forms; using System.Drawing;
…is eigenlijk overbodig!
Aanroep van een methode voert opdrachten uit in de body daarvan
2e Deeltentamen Nagekeken werk ligt voor in de zaal (alfabetisch op achternaam) Neem het even mee, de uitwerking wordt in het college besproken Discussies.
Voortborduren op eerder gedaan werk
ISensorEventListener
1e Deeltentamen Nagekeken werk ligt voor in de zaal (alfabetisch op achternaam) Neem het even mee, de uitwerking wordt in het college besproken Discussies.
Gameprogrammeren: Objecten en geheugen
Reader en Writer leest en schrijft bytes leest string en char
Gameprogrammeren: Lists en interfaces
Gameprogrammeren: Overerving
Hoofdstuk 9.2 Strings.
Letterfrequentie turven
Wat gaan we doen? Theorie (14 colleges + 3 deeltentamens)
Windows-applicatie using System.Windows.Forms; using System.Drawing;
vandaag èn vrijdag deadline maandag 12 dec.
Publieksvraag // schrijf een static methode die telt hoe // vaak een symbool voorkomt in een string // voorbeeld-aanroep: int n; n = Demo . Freq(’e’,
Lezen en schrijven van tekst
Tinpro015b-les5 Invoer en Uitvoer.
Declaratie Declaratie reserveert geheugenruimte
1. Een klasse is… Een groepje opdrachten Een groepje variabelen
Arjan Egges & Paul Bergervoet
Syntax van opdracht opdracht naam naam ( expressie ) ; . , expressie
Arjan Egges & Paul Bergervoet
Voorbeeld: Simulatie van bewegende deeltjes
Wat gaan we doen? Theorie (14 colleges + 3 deeltentamens)
Voortborduren op eerder gedaan werk
Libraries, Platform Games
Practicum: schets-editor
Opdrachten herhalen public void tekenScherm (object o, PEA pea)
Gameprogrammeren: Interfaces
Arjan Egges Paul Bergervoet Wouter van Toll
Aanroep van een methode voert opdrachten uit in de body daarvan
Gameprogrammeren: Tiles en File I/O in Tick Tick
Gameprogrammeren: Klassen en objecten
Exceptions Exception:
Eerste deeltentamen Nagekeken werk ligt voor in de zaal
Software Development fundamentals
Gameprogrammeren: Arrays
Transcript van de presentatie:

Lezen en schrijven van tekst class Tekst : Form { TextBox invoer; void lees (string naam) { StreamReader sr = new StreamReader (naam); this.invoer.Text = sr . ReadToEnd ( ) ; sr . Close ( ) ; } void schrijf (string naam) { StreamWriter sw = new StreamWriter (naam); sw . Write ( this.invoer.Text ) ; sw . Close ( ) ; } }

Klassen om files te lezen en te schrijven Object Stream TextReader TextWriter FileStream StreamReader StreamWriter store MemoryStream StringReader StringWriter NetworkStream BinaryReader BinaryWriter XmlReader XmlWriter BufferedStream decorator GZipStream CryptoStream

Klassen om files te lezen en te schrijven leest en schrijft bytes leest string en char schrijft string en char Stream FileStream StreamReader StreamWriter MemoryStream leest/schrijft een file NetworkStream leest/schrijft het geheugen leest/schrijft het netwerk

Methoden van Stream abstract class FileStream Stream { int Read (byte[] doel, int max) { for (int t=0; t<max; t++) { int b = this.ReadByte(); Stream if (b==–1) return t; FileStream doel[t] = (byte) b ; } MemoryStream return max; } NetworkStream abstract virtual int ReadByte ( ) ; { /* leeg */ } } class FileStream : Stream { override int ReadByte ( ) { return ............... } }

Abstracte methode/klasse Abstracte methode: methode zonder body Abstracte klasse: bevat abstracte methode kun je geen new object van maken alleen bedoeld als superklasse Stream FileStream MemoryStream NetworkStream Brush SolidBrush HatchBrush

Decorator Streams Stream str; str = new FileStream ( "test", FileMode.Create ); Stream GZipStream klein; FileStream klein = new GZipStream ( str ) ; store MemoryStream klein.Write( mijnByteArray ); NetworkStream geef het onderliggende store-medium "in beheer" je kunt decorators combineren BufferedStream decorator GZipStream CryptoStream geheim; CryptoStream geheim = new CryptoStream ( klein ) ;

Reader en Writer leest en schrijft bytes leest string en char schrijft string en char Object Stream TextReader TextWriter FileStream StreamReader StreamWriter store MemoryStream StringReader StringWriter NetworkStream vanuit een Stream vanuit een String BufferedStream decorator GZipStream CryptoStream

Reader en Writer leest en schrijft bytes leest string en char schrijft string en char Object Stream TextReader TextWriter FileStream StreamReader StreamWriter store MemoryStream StringReader StringWriter NetworkStream Stream str; str = new FileStream ( "test.txt", FileMode.Open ); BufferedStream TextReader lezer; decorator GZipStream lezer = new StreamReader ( str ); CryptoStream string s; s = lezer . ReadToEnd ( );

Reader en Writer leest en schrijft bytes leest string en char schrijft string en char Object Stream TextReader TextWriter FileStream StreamReader StreamWriter store MemoryStream StringReader StringWriter NetworkStream Stream str; str = new FileStream ( "test.txt", FileMode.Open ); BufferedStream TextReader lezer; decorator GZipStream lezer = new StreamReader ( str ); lezer = new StreamReader ( "test.txt" ); CryptoStream convenience-methode string s; s = lezer . ReadToEnd ( );

Reader en Writer leest en schrijft bytes leest string en char schrijft string en char Object Stream TextReader TextWriter FileStream StreamReader StreamWriter store MemoryStream StringReader StringWriter NetworkStream BinaryReader BinaryWriter XmlReader XmlWriter BufferedStream leest XML-teksten leest int en double decorator GZipStream CryptoStream

statische methode die het constructie-werk doet Figuur 32 (wat de constructor nodig heeft) Object Stream TextReader (Stream) (Filenaam ,FileMode) FileStream StreamReader (Filenaam) store Memory Stream StringReader ( ) (String) Network Stream BinaryReader (Socket) (Stream) XmlReader .Create(…) Buffered Stream (Stream, int) decorator GZip Stream statische methode die het constructie-werk doet (Stream, CompressionMode) Crypto Stream (Stream, CryptoStreamMode)

…is eigenlijk overbodig! Array …is eigenlijk overbodig! array: oject dat een rij waarden bevat, met speciale notaties List: array “ingepakt” in een klasse, met standaard notaties uitgebreide Declaratie Creatie Opvragen Wijzigen Lengte String [ ] a; List<String> a; List a; a = new String[10]; a = new List(); a = new List<String>(); ……a[5]…… ……a[5]…… …a.Get(5)… a[5] = ……; a[5] = ……; a.Set(5,…); …a.Length… …a.Count… Invoegen Achtervoegen a.Insert(5,…); a.Add(…);

Voorbeeld: array class Voorbeeld : Form { } TextBox in; Button b; String [] alles; int n; Voorbeeld ( ) { } void teken(object o, PEA pea) { } in = new TextBox(); b = new Button(); b.Click += klik; this.Paint += teken; int y = 50; for (int t=0; t<n; t++) { pea.Graphics.DrawString( alles[t], ......, y ); y+=20; } alles = new String[100]; n = 0; void klik(object o, AE ae) { } if (n<100) { String s = in.Text; alles[n] = s; n++; this.Invalidate(); }

List Voorbeeld: array class Voorbeeld : Form { } TextBox in; Button b; List<String> alles; String [] alles; int n; Voorbeeld ( ) { } void teken(object o, PEA pea) { } in = new TextBox(); b = new Button(); b.Click += klik; this.Paint += teken; int y = 50; for (int t=0; t<n; t++) { pea.Graphics.DrawString( alles[t], ......, y ); y+=20; } alles.Count ;t++) alles[t] alles = new List<String>( ); alles = new String[100]; n = 0; void klik(object o, AE ae) { } if (n<100) { String s = in.Text; alles[n] = s; n++; alles.Add(s); this.Invalidate(); }

Hoe is List gemaakt? class List<Elem> { } Elem [] elems; int n; { elems = new Elem[10]; n = 0; } void Add(Elem e) { } if (n>=elems.Length) vergroot(); elems[n]=e; n++; Elem Get (int p) { return elems[p]; } this [int p] private void vergroot() { } get { } Elem [] kopie; kopie= new Elem[2*n]; for (int t=0; t<n; t++) kopie[t] = elems[t] int Count { get { return n; } } elems = kopie;

Kan het ook anders? class List<Elem> { } Elem [] elems; int n; { elems = new Elem[10]; n = 0; } void Add(Elem e) { } if (n>=elems.Length) vergroot(); elems[n]=e; n++; Elem Get (int p) { return elems[p]; } this [int p] private void vergroot() { } get { } Elem [] kopie; kopie= new Elem[2*n]; for (int t=0; t<n; t++) kopie[t] = elems[t] int Count { get { return n; } } elems = kopie; n*=2;

Ja: je kunt een List maken zonder dat een array nodig is class AndereList<Elem> { } …… 3 null © AndereList<Elem>() { …… } Elem this[int p] { …… } int Count { …… } void Add(Elem e) { …… }

Ja: je kunt een List maken zonder dat een array nodig is class AndereList<Elem> { } …… null © AndereList<Elem>() { …… } 3 Elem this[int p] { …… } int Count { …… } void Add(Elem e) { …… }

Ja: je kunt een List maken zonder dat een array nodig is class AndereList<Elem> { } interface IList<Elem> { } …… int Count { get; } ; void Clear(); void Add(Elem e) ; Elem this [int p] { get; set; }; void Insert (int p, Elem e); © AndereList<Elem>() { …… } Elem this[int p] { …… } int Count { …… } void Add(Elem e) { …… }

Namespace System.Collections.Generic interface diverse implementaties IList List Andere List

Voorbeeld: List class Voorbeeld : Form { } TextBox in; Button b; List<String> alles; IList<String> alles; Voorbeeld ( ) { } void teken(object o, PEA pea) { } in = new TextBox(); b = new Button(); b.Click += klik; this.Paint += teken; int y = 50; for (int t=0; t<n; t++) { pea.Graphics.DrawString( alles[t], ......, y ); y+=20; } alles.Count ;t++) alles = new List <String>( ); alles[t] alles = new String[100]; n = 0; AndereList void klik(object o, AE ae) { } String s = in.Text; alles[n] = s; n++; alles.Add(s); this.Invalidate();

Varianten van List genummerd zonder dubbele ICollection IList zonder dubbele ISet interface ICollection<Elem> { void Add(Elem x); bool Remove(Elem x); bool Contains(Elem x); int Count { get; }; void Clear(); } interface IList<Elem> : ICollection<Elem> { Elem this[int n] { get; set; } ; int IndexOf(Elem x); void Insert(int n, Elem x); void RemoveAt(int n); }

Implementaties van Collections ICollection LinkedList Queue Stack IList List ISet HashSet SortedSet IDictionary SortedList Sorted Dictionary

Voorbeeld: Collection class Voorbeeld : Form { } TextBox in; Button b; List<String> alles; IList<String> alles; ICollection<String> alles; Voorbeeld ( ) { } void teken(object o, PEA pea) { } in = new TextBox(); b = new Button(); b.Click += klik; this.Paint += teken; int y = 50; for (int t=0; t<n; t++) { pea.Graphics.DrawString( alles[t], ......, y ); y+=20; } alles.Count ;t++) alles = new List <String>( ); alles[t] alles = new String[100]; n = 0; LinkedList void klik(object o, AE ae) { } String s = in.Text; alles[n] = s; n++; alles.Add(s); this.Invalidate();

Hoe doorloop je een Collection? List Collection for (int t=0; t<alles.Count; t++) doeIetsMet( alles[t] ); foreach (String s in alles) doeIetsMet( s ); Speciale syntax voor specifieke situatie met bepaalde klasse opdracht for ) ( expr ; type expr in naam foreach ( ) opdracht

Toepassing: schets-editor MDI- Container Menu SchetsWin Tools SchetsControl Akties

Schets: Klasse-ontwerp SchetsEditor Control Button Base Button Program RadioButton Container Control Form Hoofdscherm SchetsWin UserControl SchetsControl System.Windows.Forms Schets System.Drawing Image Bitmap

Schets: Klasse-ontwerp SchetsEditor ISchetsTool Control Button Base Startpunt Tool Button Program TekstTool RadioButton TweepuntTool Container Control Form Hoofdscherm LijnTool PenTool SchetsWin GumTool UserControl SchetsControl RechthTool System.Windows.Forms Schets VolRechthTool System.Drawing Image Bitmap

Member-variabelen class SchetsWin class SchetsControl class Schets : Form : UserControl { { { MenuStrip strip; Schets schets; Bitmap bm; SchetsControl sc; Color kleur; ISchetsTool huidig; } } }

Schoonmaakwerk doen class SchetsWin class SchetsControl class Schets : Form : UserControl { { { MenuStrip strip; Schets schets; Bitmap bm; SchetsControl sc; Color kleur; void Teken (Graphics g) ISchetsTool huidig; void teken(...PEA p) SchetsWin() { gr.DrawImage (bm, 0, 0); { schets.Teken (p.Graphics); { sc = new SchetsControl(); } } this.maakAkties(); } void Schoon( ) void Schoon(...AE a) void maakAkties() { Graphics g = { schets.Schoon(); { Button b Graphics. FromImage(bm); = new Button(); this.Invalidate(); b.Text = "Clear"; } g.FillRectangle (White,0,0,w,h); b.Click += sc.Schoon; } } } } }

Tool kiezen class SchetsWin : Form SchetsControl sc; { MenuStrip strip; ISchetsTool huidig; void maakTools( ICollection<ISchTool> tools ) { foreach (ISchetsTool tool in tools) { RadioButton r = new RadioButton(); r.Text = tool.ToString(); r.Tag = tool; r.Click += this.klikTool; } } void klikTool ( object obj, AE ae ) { huidig = (ISchetsTool) ( (Button) obj ) . Tag } }

Tool gebruiken class SchetsWin interface ISchetsTool : Form SchetsControl sc; { MenuStrip strip; ISchetsTool huidig; { SchetsWin ( ) void MuisVast( { sc = new SchetsControl ( ); SchetsControl s, sc.MousePress += this.muis; } Point p); void muis ( object o, MEA mea) { huidig.MuisVast( sc, mea.Location) } void klikTool ( object obj, AE ae ) { huidig = (ISchetsTool) ( (Button) obj ) . Tag } } }

Tool gebruiken class SchetsWin interface ISchetsTool anonieme methode : Form SchetsControl sc; { MenuStrip strip; ISchetsTool huidig; { SchetsWin ( ) void MuisVast( { sc = new SchetsControl ( ); SchetsControl s, sc.MousePress += ( object o, MEA mea) => Point p); anonieme methode { huidig.MuisVast( sc, mea.Location); } } void klikTool ( object obj, AE ae ) { huidig = (ISchetsTool) ( (Button) obj ) . Tag } } }

Schets-tools (1) interface ISchetsTool { } void muisVast ( SchetsControl s, Point p) ; void muisLos ( SchetsControl s, Point p) ; void muisDrag ( Schetscontrol s, Point p ) ; void Letter ( SchetsControl s, char k) ;

Schets-tools (2) abstract class StartpuntTool : ISchetsTool { } Point startpunt ; Brush kwast ; virtual void MuisVast ( SchetsControl s, Point p) { startpunt = p; } virtual void MuisLos ( SchetsControl s, Point p) { kwast = new SolidBrush( s.Penkleur ); } abstract void MuisDrag ( SchetsControl s, Point p) ; abstract void Letter ( SchetsControl s, Point p) ;

Schets-tools (3) class TekstTool : StartpuntTool { } ISchetsTool Startpunt Tool class TekstTool : StartpuntTool { } override void Letter ( SchetsControl s, char c) { } Graphics g = s . MaakBitmapGraphics(); g . DrawString( c, kwast, ..., startpunt ); startpunt.x += ……c….Width; override void MuisDrag ( SchetsControl s, Point p) { } override void MuisLos ( SchetsControl s, Point p) { }

Schets-tools (4) abstract class TweepuntTool : StartpuntTool { } TekstTool Tweepunt Tool ISchetsTool Startpunt Tool abstract class TweepuntTool : StartpuntTool { } override void MuisDrag ( SchetsControl s, Point p) { } Graphics g = s . CreateGraphics(); this . Bezig (g, startpunt, p); override void MuisLos ( SchetsControl s, Point p) { Graphics g = s . MaakBitmapGraphics(); this . Compleet (g, startpunt, p); } abstract void Bezig (Graphics g, Point p1, Point p2) ; virtual void Compleet (Graphics g, Point p1, Point p2) { this . Bezig (g, p1, p2); }

Schets-tools (5) class RechthoekTool : TweepuntTool { } TekstTool Tool Startpunt Tool Tweepunt Tool Rechthoek Tool class RechthoekTool : TweepuntTool { } override void Bezig ( Graphics g, Point p1, Point p2 ) { g . DrawRectangle(kwast, Punten2Rechthoek(p1,p2) ); } static Rectangle Punten2Rechthoek(Point p1, Point p2) return new Rectangle( { new Point( Math.Min(p1.X,p2.X), Math.Min(p1.Y,p2.Y)) new Size ( Math.Abs(p1.X-p2.X), Math.Abs(p1.Y-p2.Y)) ); }

Schets-tools (6) class VolRechthoekTool : RechthoekTool { } TekstTool Tool Startpunt Tool Tweepunt Tool Rechthoek Tool VolRechth Tool class VolRechthoekTool : RechthoekTool { } override void Compleet ( Graphics g, Point p1, Point p2 ) { } g . FillRectangle(kwast, Punten2Rechthoek(p1,p2) );

Schets-tools (7) class LijnTool : TweepuntTool { } TekstTool LijnTool Tool Startpunt Tool Tweepunt Tool Rechthoek Tool VolRechth Tool class LijnTool : TweepuntTool { } override void Bezig ( Graphics g, Point p1, Point p2 ) { } g . DrawLine( MaakPen(kwast,3), p1, p2 );

Schets-tools (8) class PenTool : LijnTool { } TekstTool LijnTool PenTool Tool Startpunt Tool Tweepunt Tool Rechthoek Tool VolRechth Tool class PenTool : LijnTool { } override void MuisDrag ( SchetsControl s, Point p ) { } this . MuisLos (s, p); this . MuisVast (s, p);

Schets-tools (9) class GumTool : PenTool { } TekstTool LijnTool PenTool GumTool Tool Startpunt Tool Tweepunt Tool Rechthoek Tool VolRechth Tool class GumTool : PenTool { } override void Bezig ( Graphics g, Point p1, Point p2 ) { } g . DrawLine( MaakPen(Brushes.White,7), p1, p2 );