Filer

Vejledning løsninger
Opgaver
1 Lav et program, der udskriver sin egen kildetekst på skærmen, ved at indlæser teksten fra den tekstfile, som indeholder kildeteksten.
2 Lav et program, der indlæser en tekstfile efter eget valg (helst en med almindelig prosa). Programmet skal udskrive en statistik over forekomster af bogstaverne A til Z, idet der ikke skelnes mellem store og små bogstaver. Statistikken skal indeholde oplysninger om den procentuelle hyppighed af bogstaverne. Statistikken skal udskrives i en tekstfile.
Man kan evt. anvende denne file: jekyll_hyde.txt[1], med den velkendte historie om "Dr. Jekyll og Mr. Hyde" (1886), af R.L. Stevenson. Stevenson er også kendt for: "Skatteøen" (1883). Statistikken bliver:
statistik.txt
Statistik for filen: jekyll_hyde.txt

  A: 8,03%
  B: 1,42%
  C: 2,36%
  D: 4,92%
  E: 12,51%
  F: 2,39%
  G: 1,79%
  H: 6,26%
  I: 6,68%
  J: 0,16%
  K: 0,85%
  L: 4,06%
  M: 2,64%
  N: 6,9%
  O: 7,68%
  P: 1,57%
  Q: 0,11%
  R: 5,64%
  S: 6,26%
  T: 9,2%
  U: 2,89%
  V: 0,79%
  W: 2,44%
  X: 0,12%
  Y: 2,3%
  Z: 0,03%
Hyppigheden af bogstavet 'E' springer som sædvanlig i øjnene.
3 Lav et program der indlæser en tekstfile og udskriver den i en anden tekstfile. Programmet skal frasortere alle tegn der ikke er bogstaver (A til Z) eller mellemrum.
*4 I de fleste operativsystemer har man mulighed for at angive en sti eller file vha. diverse wildcards. F.eks. er følgende angivelse:
*.jpg
samtlige filer, der slutter med ".jpg" - f.eks. "background.jpg".
'*' er sjældent den eneste sådanne angivelse man kan bruge. F.eks. tillader de fleste også, at man bruger '?' - f.eks.:
???.jpg
der er samtlige filer der slutter på ".jpg" og har tre tegn før punktum - f.eks. "pic.jpg".
Et tredie tegn, som jeg ikke har set anvendt nogen steder, men som vi vil indføre i denne opgave, er '#', der kan stå for et vilkårligt ciffer - f.eks.:
pic###.jpg
der er samtlige filer der starter med "pic", dernæst har tre cifre, og slutter på ".jpg" — f.eks. "pic025.jpg".
Masker Vi vil kalde angivelser der bruger disse wildcards: masker. Ovenfor har vi set tre eksempler på masker.
I denne opgave skal du lave en implementation af FileFilter, der kan filtrere filer alt efter om de opfylder et kriterie formuleret på følgende form:
<maske> | <maske> | ... | <maske>
altså, at filens navn opfylder mindst én af en række masker som filteret er sat til at arbejde med. Antallet af masker kan være fra 0 og opefter. Hvis der er 0 masker vil alle filenavne blive accepteret.
Klassen skal hedde: StringFileFilter, og have to konstruktorer: En default-konstruktor, der sætter listen af masker til den tomme liste, og en konstruktor, der tager én maske som parameter og sætter listen til (som udgangspunkt) kun at indeholde denne maske.
StringFileFilter skal også have en add-metode, så det er muligt at tilføje vilkårligt mange masker til det samlede kriterie.
Bemærk, at denne opgave er meget svær!

Fodnoter:
1 Teksten er fra Project Gutenberg. Det bemærkes, at de sædvanlige (og omfattende) referencer som Project Gutenberg anbringer i deres tekstfiler er fjernet, da det ikke er en del af historien. Ophavsretten til denne og andre historier under Project Gutenberg er udløbet (det er forudsætningen for at den indgår i projektet), og hverken Project Gutenberg eller undertegnede har nogen ophavsret til filen. Jeg har selv bidraget med frivillig arbejdskraft til filer, der ligger på Project Gutenberg gennem Distributed Proofreaders.