Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

Jæger: Robuste og sikre systemer INF150 Programmering torsdag 5.10 MER OM: Lesing fra fil Unntakshåndtering Kap 8.

Liknende presentasjoner


Presentasjon om: "Jæger: Robuste og sikre systemer INF150 Programmering torsdag 5.10 MER OM: Lesing fra fil Unntakshåndtering Kap 8."— Utskrift av presentasjonen:

1 Jæger: Robuste og sikre systemer INF150 Programmering torsdag 5.10 MER OM: Lesing fra fil Unntakshåndtering Kap 8

2 Jæger: Robuste og sikre systemer sr.Peek() Lesing fra Sekvensiell fil med –Kjent antall linjer, f.eks. 5 Det betyr at vi må ha med 5 sr.ReadLine for å lese alle –Ukjent antall linjer? Vi kan ikke vite hvor mange linjer det er før vi har sett i filen, dvs lest den! Det finnes en metode "sr.Peek()" i Visual Basic som ber operativsystemet om å sjekke om neste linje finnes eller om vi har nådd slutten. Vi skal gjøre sr.ReadLine omigjen mange ganger inntil sr.Peek() finner at vi har nådd slutten.

3 Jæger: Robuste og sikre systemer Husker Do Loops side 248 Syntaks: Do While condition Statements Loop Eksempel (i hendelsesprosedyre til knapp): Dim tall As Integer = 1 Do While tall <= 5 MsgBox("Tall: " & tall) tall = tall +1 'Hva skjer dersom denne ikke er med? Loop

4 Jæger: Robuste og sikre systemer Do While og lesing fra fil side 413 Do While s 248 Dim sr As IO.StreamReader sr = IO.File.OpenText(“antallBiler.txt”) lstNames.Items.Clear() Do While sr.Peek <> -1 lstNames.Items.Add(sr.ReadLine) Loop

5 Jæger: Robuste og sikre systemer Legge elementer til eksisterende fil Dim sw As IO.StreamWriter sw = IO.File.AppendText(“antallBiler.txt”) sw.WriteLine(“tekst”) … sw.Close() Dersom filen ikke eksisterer fra før vil en ny fil med navn "antallBiler.txt" bli laget

6 Jæger: Robuste og sikre systemer Ulike fil-modus Operativsystemet (her Windows) støtter ulike måter å bruke filen på: –OpenText –CreateText –AppendText Disse må ikke blandes, en må ta sr.Close() på en åpnet fil før den forsøkes åpnet på nytt.

7 Jæger: Robuste og sikre systemer Sjekk om fil allerede finnes IO.File.Exists("AntallBiler") er True dersom filen finnes (se side 414)

8 Jæger: Robuste og sikre systemer Sletting av fil En fil kan slettes med: –IO.File.Delete("AntallBiler.txt")

9 Jæger: Robuste og sikre systemer En linje i en sekvensiell fil kan ikke slettes! (se side 415) For å få til dette kan en: –Lage en ny fil (kladdefil) hvor en legger alt som skal beholdes: sw = IO.CreateText(“Kladd-AntallBiler.txt") Overfør så det som skal beholdes fra AntallBiler.txt Do While sr.Peek() <> -1 enLinje = sr.ReadLine If (enLinje skal være med) Then 'logisk test avhengig av hva som skal ut sw.WriteLine(enLinje) End If Loop –Slett den gamle AntallBiler.txt: –IO.File.Delete("AntallBiler.txt") –Forandre navnet til "kladd-AntallBiler.txt" til "AntallBiler.txt" –IO.File.Move("kladd-AntallBiler.txt", "AntallBiler.txt")

10 Jæger: Robuste og sikre systemer Unntakshåndtering (fra kap 8.1 s.418) 2 hovedtyper problemer/feil i programmene: –Bugs: vi har skrevet feil kode, f.eks. Feil formel: Moms = Pris * 0.23 '(skal være 0.25) Feil metode: sw=IO.CreateText("filen.txt") når vi ønsker å legge en ny linje inn i "filen.txt", riktig er sw=IO.AppendText("filen.txt") –Exceptions: Bruker har gitt feil verdi Feil i inndata eller sr=IO.OpenText("filnavn gitt av bruker") bruker har gitt et filnavn som ikke finnes –Ser nå på Exceptions (Bugs kommer senere)

11 Jæger: Robuste og sikre systemer Håndtering av Exceptions Når noe uventet skjer (en exception) vil VB oppdage dette og utføre kode som gir brukeren beskjed. Standard er at programmet stopper/krasjer og en feilmelding vises, e.g. InvalidCastException

12 Jæger: Robuste og sikre systemer Eksempel Public Class Form1 Dim hoydeITommer As Double Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim hoydeICm As Integer hoydeICm = CInt(InputBox("Hvor høy er du (i hele cm)?")) hoydeITommer = hoydeICm / 2.54 MsgBox("Du er " & hoydeITommer & " tommer høy") End Sub End Class

13 Jæger: Robuste og sikre systemer Bruker oppgir reelt tall, program krasjer

14 Jæger: Robuste og sikre systemer Årsak Konvertering fra tekst med flyttall til heltall er ikke lov i VB Andre input vil også få programmet til å krasje, typisk: –Blank linje i InputBox er heller ikke lov

15 Jæger: Robuste og sikre systemer Skriving av robuste program Vi som programmerere bør skrive kode som håndterer brukerfeil Det vil si at programmet ikke skal krasje og at brukeren skal få beskjed hva som er galt VB har lagt til rette for at når "Exception" oppdages kan vi legge inn kode som skal utføres. –Try-Catch-Finally

16 Jæger: Robuste og sikre systemer Try-Catch-Finally Try: VB prøver å utføre det etter Try Catch: Dersom en Exception skjer hopper VB rett til det som kommer etter Catch Finally: Uansett om Exception skjer eller ikke utføres koden i Finally

17 Jæger: Robuste og sikre systemer Try Catch Public Class Form1 Dim hoydeITommer As Double Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim hoydeICm As Integer Try hoydeICm = CInt(InputBox("Hvor høy er du (i hele cm)?")) Catch MsgBox("Du må angi høyde som et heltall") ' kan legge inn en defalut verdi, e.g. hoydeICm = 0 End Try hoydeITommer = hoydeICm / 2.54 MsgBox("Du er " & hoydeITommer & " tommer høy") End Sub End Class

18 Jæger: Robuste og sikre systemer Med finally Public Class Form1 Dim hoydeITommer As Double Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim hoydeICm As Integer Try hoydeICm = CInt(InputBox("Hvor høy er du (i hele cm)?")) Catch MsgBox("Du må angi høyde som et heltall") ' kan legge inn en defalut verdi, e.g. hoydeICm = 0 Finally hoydeITommer = hoydeICm / 2.54 MsgBox("Du er " & hoydeITommer & " tommer høy") End Try End Sub End Class Gjør Example 3 side 421

19 Jæger: Robuste og sikre systemer Neste forelesning Mandag 9. oktober På rom B136


Laste ned ppt "Jæger: Robuste og sikre systemer INF150 Programmering torsdag 5.10 MER OM: Lesing fra fil Unntakshåndtering Kap 8."

Liknende presentasjoner


Annonser fra Google