mandag 15. oktober 2007

oblig 7

Utvid tabellomformer slik at den leser data fra fil:
  • Bruker ser knapp for "les fil" (btnLesFil) som leser tall fra ei fil (bruker oppgir filnavnet med OpenFileDialog, s. 466).
  • Det første heltallet på linje N i fila legges i N'te element i tabell X. PRESISERING (kl. 13.15):
    • Dette forutsetter jo at alle linjene har legale heltall. Men, noen av linjene har jo ikke dette, og regelen blir da: Neste legale heltall legges i neste ledige element.
    • X skal jo her ha helt nytt innhold. Sett den derfor initielt slik at den har plass til intTabellBlokkstr (et heltall med verdien 100) element. Hvis tabellen (X) blir full kaller du subrutinen nyStorrelse() som du laget i oblig 5, slik at X hver gang utvides med intTabellBlokkstr. Idet du f.eks. legger inn det 101'ste element utvides tabellen til 200. Slik vokser X i etapper fra 100, til 200, 300 o.s.v. Hvis det er 549 virkelige heltall i filen vil X til slutt ha plass til 600 element. Hvis filen bare har 3 virkelige heltall forblir X med plass til 100 element. Filen 15000tall.txt brukes til testing.
  • Du skal bruke tall = Cint (eller din egenutviklede tall = hentHeltall(s)) der s er sist innleste streng fra fila, og lage differensiert behandling av unntak for overflyt (for store tall) og feil typekasting (ex. tom streng).
  • Idet du fanger en feil bygger du (med &-operator) en streng "strFeilmelding" (initielt tom streng). Etter at filen er lest i sin helhet har du en strFeilmelding som f.eks. "Linje 2: Overflyt, linje 17: Ikke heltall, linje 355: ...".
  • Programmet skal IKKE abortere, og ALLTID rapportere en melding (etter at filen er lest) ved å kalle visFeilmelding(strFeilmelding), en prosedyre du kan kalle fra flere steder. Til sist kalles visTabell(a,l) med X og lstA som argument. Du skal fange alle IO-relaterte feil (som beskrives i kap. 8.1) og bygge ut strFeilmelding med MENINGSFULLT innhold.
  • visFeilmelding(s) skal vise strengen s i en msgbox og (i tillegg, i samme msgbox) gi en beskjed om at "Du kan ringe tlf. xxx xxx eller sende ePost til tabellsjef@firmaet.mitt hvis du trenger hjelp". Telefonnumrene og ePost hentes ut av datastrukturen (s. 343) kontaktProgram. Denne er av typen Kontaktinfo (en "Structure Kontaktinfo") som igjen har strengene strNavn, strTelefon og strEPost.
Du kan (kun ved lesing) bruke filene tall.txt og 15000tall.txt som ligger på kursinfo: k:\in-kurs\IBE150. Bruker skal kunne lagre tabellen til fil.
  • Bruker ser knapp "lagre til fil" (btnLagreFil) som lagrer tabell X til en fil, slik at det Nte element i X blir Nte linje i filen.
  • La brukeren oppgi filen med OpenFileDialog (som over).
  • Hvis du vil: Hvis brukeren allerede har valgt "les fil" er det vanligvis greit at det filnavnet som da ble brukt, blir husket globalt (strFilnavn) og foreslått (slik at brukeren slipper all navigeringen)
  • Programmet skal kun reagere på IOException (samlekategori) og kalle opp visFeilmelding ("Feil oppstod ved lagring").

1 kommentar:

kd sa...

IBE150,

endelig er det noen som spør, og her er mitt svar:

> Her er noen spørsmål som dukket opp da jeg leste gjennom oppgave 7.
>
> "Neste legale heltall legges i neste ledige element."
> Menes det at et element skal hopper over så det blir stående blankt? Eller
> at bare en linje i fila skal hoppes over, og at alle verdier forskyver seg?

Det siste (forskyves)!

Hvis input er illegalt blir det ikke lagt i tabellen.
Anta at linje 1 er legal og legges i X(0),
linje 2 er OK og går til X(1).
I linje 3 blir det exception og strFeilmelding bygges ut.
Linje 4 er OK og legges i X(2).

Altså trengs to tellere (en for linjenummer i fil,
en for indeks til X).

> overflow
> Hvor store tall-verdier gir overflow i Visual Basic?

X inneholder Integer

Alt over pluss-minus (2**31)-1 gir overflow,
altsaa pluss-minus 2.147 milliarder.

Med min ultrahurtige bordkalkulator i UNIX finner jeg ut:
# bc -l
bc 1.06 Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
2^31
2147483648

Altså er max heltall dette minus 1 (2147483647).

I VB er konstantene Integer.minvalue og Integer.maxvalue
av interesse.


> Structure Kontaktinfo
> Hvor kommer verdiene som skal ligger i Struct-en fra?

Nei, de må vel hardkodes inn i programmet enn så lenge.

>
> IOException