Kurt Nørmark
Institut for Datalogi, Aalborg Universitet
| Sammendrag Forrige lektion Næste lektion Stikord Referencer Indhold | I denne lektion beskriver vi filbegrebet og de forskellige operationer på filer. Vi slutter af med en diskussion af hvordan structures can udskrives på filer og indlæses fra filer. |
| Introduktion til filer |
| Oversigt over filbegreber Slide Indhold Stikord Referencer |
|
|
|
| Sekventielle filer Slide Indhold Stikord Referencer |
|
| Begrebet sekventiel fil: En sekventiel fil læses altid i den rækkefølge den er skrevet. Rækkefølgen af enheder i en sekventiel fil afspejler direkte rækkefølgen af de udførte skriveoperationer på filen. |
|
| Random access filer Slide Indhold Stikord Referencer |
|
| Filer i C |
| Sekventielle filer i C Slide Indhold Stikord Referencer |
|
|
| Filbuffering Slide Indhold Stikord Referencer |
|
| Figur. En illustration af filbuffere mellem den ydre enhed og programmet | ![]() |
|
| Strukturen FILE Slide Indhold Stikord Referencer |
|
|
|
| Simpel skrivning og læsning af en fil Slide Indhold Stikord Referencer |
|
| Program: Skrivning af tegn fra en tekststreng på en tekstfil. |
|
| Program: Læsning af tegn fra en tekstfil til en tekststreng. |
|
|
| Program: Et program der laver dobbelt linieafstand i en tekstfil. |
|
|
| Standard input, output og error Slide Indhold Stikord Referencer |
|
|
|
|
| Fil opening modes Slide Indhold Stikord Referencer |
|
| Tabel. En tabel der beskriver betydningen af de forskellige opening modes af filer. |
|
|
| Program: Tilføjelse af tegn til en tekstfil. |
|
| Program: Læsning og skrivning af fil med r+. |
|
| Program: first-file efter at ovenstående program er kørt. |
|
| Program: Standard output fra ovenestående program. |
|
|
| Detaljer om fil opening modes Slide Indhold Stikord Referencer |
|
| Tabel. En tabel der i størrel detalje beskriver betydningen af de forskellige opening modes af filer. |
|
|
| Funktioner der arbejder på sekventielle filer Slide Indhold Stikord Referencer |
|
|
| Opgave 11.3. Læsning af k ord fra fil | Skriv en funktion int getwords(FILE *ifp, int k, char *words) der, om muligt, læser k ord fra tekstfilen peget på af ifp. Ordene skal læses over i tekststrengen words (som allokeres af den funktion, som kalder getwords). Hvis det ønskes kan ordene organiseres linievis, eller blot med 'white space' imellem ordene. Den programmerede funktion skal returnere det faktiske antal af læste ord (som kan være mindre end k). |
| Opgave 11.3. En simpel grep funktion | grep er en Unix kommando der søger efter linier i en tekstfil, som matcher en søgestreng. I denne opgave vil vi programmere en meget simpel variant af grep, som udskriver de tekstlinier, i hvilke et bestemt søgeord forekommer. Vi ønsker at anvende det udviklede program således fra kommandolinien: search programmering my-file.txt eller måske snarere: ./search programmering my-file.txt Dette skal udskrive alle de liner i my-file.txt som indholder strengen "programmering". Programmet skal anvende program parametre, som forklaret på denne slide. |
| Directories i C |
| Directories i C Slide Indhold Stikord Referencer |
|
|
|
| Program: Et list directory program - lånt fra Wikepedia. |
|
| Funktioner på random access filer Slide Indhold Stikord Referencer |
|
|
| Program: Et program der læser en fil baglæns. |
|
| Formateret output og input |
| Formateret output - printf familien (1) Slide Indhold Stikord Referencer |
|
|
| Formateret output - printf familien (2) Slide Indhold Stikord Referencer |
|
| Figur. Nedbrydning af kontrolstrengen for %-#08.3hd. Denne figur er inspireret fra 'A C Reference Manual' af Harbison & Steele | ![]() |
|
| Formateret output - printf familien (3) Slide Indhold Stikord Referencer |
|
|
| Program: Udskrivning af heltal: Illustration af *.* field width og precision . |
|
| Program: Udskrivning af doubles: Illustration af *.* field width og precision . |
|
|
| Formateret input - scanf familien (1) Slide Indhold Stikord Referencer |
|
|
|
| Formateret input - scanf familien (2) Slide Indhold Stikord Referencer |
|
|
| Program: Illustration af directives med almindelige tegn. |
|
| Program: Illustration af brugen af scan width ved læsning af en streng. |
|
| Program: Illustration af brugen af scan width ved læsning af en double. |
|
| Formateret input - scanf familien (3) Slide Indhold Stikord Referencer |
|
|
| Formateret input - scanf familien (4) Slide Indhold Stikord Referencer |
|
| Program: Et program der læser ikke-blanke liner fra en fil og udskriver disse på standard output. |
|
| Program: Et andet program der adskiller alfabetiske og numeriske afsnit i en tekst - læser fra stdin. |
|
| Program: Et andet program der adskiller alfabetiske og numeriske afsnit i en tekst - læser fra en streng - virker ikke. |
|
| Program: Et andet program der adskiller alfabetiske og numeriske afsnit i en tekst - læser fra en streng - virker. |
|
| Input og output af structures |
| Input/Output af structures (1) Slide Indhold Stikord Referencer |
|
|
| Input/Output af structures (2) Slide Indhold Stikord Referencer |
|
| Program: Programmet der udskriver bøger på en output fil. |
|
| Program: Den skrevne fil. |
|
| Program: Programmet der indlæses bøger fra en input fil. |
|
| Program: Output fra programmet - på skærmen. |
|
| Program: Header filen book-read-write.h. |
|
| Program: Implementationen af biblioteket - book-read-write.c. |
|
| Program: Compilering af programmerne. |
|
| Opgave 11.4. Input og Output af structs | Vi vil antage at vi har en struct som beskriver data om en person, så som
struct person {
char *name;
int age;
char sex;
} hvor sex er enten tegnet 'm' eller 'f'. I denne øvelse bliver du bedt om at programmere funktioner, som kan udskrive et antal personer
på en fil, og som efterfølgende kan indlæse disse igen. Konkret, skal der skrives to funktioner
print_person(person *p, FILE *ofp)
person *read_person(FILE *ifp) Du kan vælge en tekst-baseret og linie-orienteret fremgangsmåde, som illustreret ved forelæsningen. Som et noget lettere alternativ kan du vælge at anvende en binær fremgangsmåde ved brug af fwrite og fread. Overvej hvad der skal til for at anvende fwrite og fread på struct person. |
| Input/Output af structures (3) Slide Indhold Stikord Referencer |
|
|
|
| Binær input/output med fread og fwrite Slide Indhold Stikord Referencer |
|
|
| Eksempler: Binær input/output med fread og fwrite Slide Indhold Stikord Referencer |
|
| Program: Skrivning af en struct til en binær fil. |
|
| Program: Tilsvarende læsning af en struct fra en binær fil. |
|
| Program: Output fra programmet - på skærmen. |
|
|
| Program: Skrivning af en struct med et pointer felt til en binær fil. |
|
| Program: Tilsvarende læsning af en struct fra en binær fil - virker ikke. |
|
| Program: Output fra programmet - på skærmen. |
|
| Opgaver Slide Indhold Stikord Referencer |
| Opgave 11.5. Tynde matricer | En vilkårlig matrix kan generelt repræsenteres på en tekstfil, med én linie pr. række. Første linie kan angive antallet af rækker og søjler i matricen (altså to heltal). I denne opgave kalder vi dette for den generelle tekstfil repræsentation af vilkårlige matricer. En tynd matrix er et array af to dimensioner, hvor mange af elementerne er nul. I denne opgave vil skrive et program der undersøtter en speciel tekstfil repræsentation af tynde matricer på tekstfiler, som i visse tilfælde fylder mindre end den generelle repræsentation af matricer på tekstfiler. I den nye repræsentation skal den første linie af tekstfilen indeholde dimensionerne af matricen - to heltal - antal rækker og antal søjler. Den anden linie skal angive antallet af elementer i matricen, som ikke er nul. Hver af de efterfølgende linier indholder tre tal: Rækkenummer, søjlenummer, og et tal fra matricen (som ikke er nul). Skriv først en funktion som læser en matrix fra den generelle repræsentation på en tekstfil, og som udskriver den specielle tynde repræsentation på en ny tekstfil. Skriv dernæst en funktion som løser det omvendte problem: Læsning af en tynd matrix fra en tekstfil og skrivning af en tilvarende matrix på generel form på en anden tekstfil. Som et eksempel svarer følgende generelle tekstfil repræsentation af matricen 4 3 0.0 0.0 1.0 0.0 0.0 0.0 2.0 0.0 0.0 0.0 3.0 0.0 til følgende specielle tekstfil repræsentation af matricen - som en tynd matrice 4 3 3 1 3 1.000000 3 1 2.000000 4 2 3.000000 Denne opgave svarer til opgave 4 side 679 i 6. udgave af lærebogen |
| Samlede referencer Indhold Stikord |
|
Kapitel 11: Input/Output og Filer
Kursets hjemmeside Forfatteren's hjemmeside Om frembringelsen af disse sider Forrige lektion (top) Næste lektion (top) Forrige lektion (bund) Næste lektion (bund)
Genereret: 13. november 2012, 16:02:21