Standardfilerna Input och Output

Relevanta dokument
Standardfilerna Input och Output. Filer... Filer... vanlig utbyggnad för ökad dynamik. Filer... filtyper

Några fakta om Standard Pascal. Serafim Dahl, Carina Edlund, m.fl.

Pascal... Pascal. Pascal... Pascal...

Pascal. Vi har ofta behov av att behandla klumpar av data som i sig är inhomogena men sett över ett helt register har klumparna lika struktur.

Poster... Poster. Poster... Poster...

Pascal. reserverade ord fördefinierade funktioner och procedurer egendefinierade funktioner, procedurer och objekt

Funktioner, Procedurer och Parametrar. Funktioner, Procedurer och Parametrar... Funktioner, Procedurer och Parametrar procedurspecifikation

GOTO och lägen. Några saker till och lite om snabbare sortering. GOTO och lägen (3) GOTO och lägen (2)

Datalogi, grundkurs 1. Lösningsförslag till tentamen

Några saker till och lite om snabbare sortering

Filer. DA2001 (Föreläsning 16) Datalogi 1 Hösten / 19

Poster. Vi har ofta behov av att behandla klumpar av data som i sig är inhomogena men sett över ett helt register har klumparna lika struktur.

Datalogi, grundkurs 1. Lösningsförslag till tentamen

Typsystem. Typsystem... Typsystem... Typsystem... 2 *

Typsystem. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 19

Kontinuerliga listor. Fält (listor) Kontinuerliga listor... Kontinuerliga listor...

Ordnad lista. Listor... Ordnad lista... Ordnad lista typer

Föreläsning 6: Introduktion av listor

Sökning och sortering. Sökning och sortering - definitioner. Sökning i oordnad lista. Sökning med vaktpost i oordnad lista

Föreläsning 5: Introduktion av pekare

Sökning och sortering

Filer och structer Del 2

Omgivningar. Omgivningar är viktiga eftersom de avgör vilka namn som är synliga och därmed dessas innebörd och de värden som är förknippade med dem.

Föreläsning 7: Filer

Programmering i C++ EDA623 Strömmar och filer. EDA623 (Föreläsning 9) HT / 19

Föreläsning 13. In- och utmatning

Introduktion till MATLAB, med utgångspunkt från Ada

Enkla datatyper minne

Datalogi, grundkurs 1. Lösningsförslag till tentamen

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

Exempel på ett litet Ada-program

Imperativ programmering. Föreläsning 2

Objektorienterad Programmering (TDDC77)

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Grundläggande datalogi - Övning 1

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Deklarationer/definitioner/specifikationer

Tentamen Grundläggande programmering

Deklarera en struct som kan användas för att representera en rät linje

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

Programmeringsteknisk översiktskurs för yrkeshögskoleprogram

Objektorienterad Programmering (TDDC77)

Visual Basic, en snabbgenomgång

2D1310 Programmeringsteknik Tentamen (1p) lördag 29 april 2000 kl 14-17

Strängar. Strängar (forts.)

Repetition i Pascal. Exemplen fac. Exemplen fac i Pascal. Exemplen fac motivering. Orginalet

En kort text om programmering i C.

Abstraktion. Abstraktion... Abstraktion... Abstraktion...

DD1361 Programmeringsparadigm. Carina Edlund

Abstraktion. procedurabstraktion. DA2001 (Föreläsning 26) Datalogi 1 Hösten / 27

Föreläsning 4: Filer och strömmar

TDIU01 - Programmering i C++, grundkurs

Dagens föreläsning Programmering i Lisp. - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning

Språket Python - Del 1 Grundkurs i programmering med Python

Outline. For. I istället för att följa det normala ordningen, man ändra den. I i Java får man inte göra hopp hur som helst

Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic

2 Pekare och dynamiska variabler.

Ordlistor, filhantering och ut på webben. Linda Mannila

Inledande programmering med C# (1DV402) Summera med while"-satsen

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

kl Tentaupplägg

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Introduktion till Jasmine 1.2 ODQL

n Detta för att kunna koncentrera oss på n Tal: number? n Symboler: symbol? n Strängar: string? n Tecken: char? n Boolskt: boolean?

Polymorfi (många skepnader) är egentligen en mängd olika abstraktionsmekanismer och en indelning skulle kunna se ut så här: polymorfi

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Föreläsning 5 Programmeringsteknik DD1310. Modulen doctest. Exempel. Doctest Dictionary Filhantering

Pekare och arrayer. Indexering och avreferering

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Uppgift (poäng) 1 (2) 2 (3) 3 (4) 4 (4) 5 (3) 6 (4) 7 (6) 8 (6) 9 (8) Summa

Föreläsning 1: Momstabellen i C++

Hej Då, Karel! Programmering. Vårt första Javaprogram. hh.se/db2004. Java. Grundtyper, variabler och arrayer

SCB :-0. Uno Holmer, Chalmers, höger 2 Ex. Induktiv definition av lista. // Basfall

Dagens föreläsning. Diverse Common Lisp. Konstanter, parametrar, globala variabler

Föreläsning 3: Booleans, if, switch

Datalogi I, grundkurs med Java 10p, 2D4112, Fiktiv tentamen, svar och lösningar och extra kommentarer till vissa uppgifter 1a) Dividera förs

Översikt över Visual Basic

Lite om reella tal. Programmering. I java. Om operatorers associativitet och prioritet

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Programmeringsteknik med C och Matlab

Generell säkerhet. Loggning - Hur mycket ska man logga? Inloggningsrutinerna i Unix. Loggning fortsättning

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

729G04 Programmering och diskret matematik. Föreläsning 7

Klassdeklaration. Metoddeklaration. Parameteröverföring

Twincat: PLC Control

Sammanfattning. Listor. List-manipulering. Matris. /home/lindahlm/activity-phd/teaching/11dd1310/exercise3/exercise3.py September 13, 20111

Inledande programmering med C# (1DV402) 27+15=42 1 (22)

5 Grundläggande in- och utmatning

Tentamen i Introduktion till programmering

Laboration 1 Introduktion till Visual Basic 6.0

Föreläsning 1 & 2 INTRODUKTION

Variabler och konstanter

Föreläsning REPETITION & EXTENTA

GRUNDER I VHDL. Innehåll. Komponentmodell Kodmodell Entity Architecture Identifierare och objekt Operationer för jämförelse

kl Tentaupplägg

Programmeringsteknik med C och Matlab

Tentamen ges för: Tentamensdatum: Tid:

Välkomna till DIT012 IPGO. Tyvärr en bug i Google Docs: Sidnummer stämmer inte alltid. Alla anteckningar börjar på sidan 1.

Funktionell programmering DD1361

Transkript:

Standardfilerna Input och Output Standardfilerna Input och Output är textfiler av typen TEXT (som bara finns för filer). Innehållet är av typen Char och filerna är strukturerade i form av rader. En sådan fil kan läsas på vanligt sätt (med Emacs, more,... ) I standard Pascal skall programhuvudet, i program som använder in- och utmatning, innehålla PROGRAM test(input, Output); na kan omdirigeras med > och < (i UNIX) Ex. a.out < d.d > r.r Om det finns en fil d.d så kommer alla satser Read(variabellista) eller ReadLn(variabellista) läsas från filen d.d och om vi läser en variabel av typen Integer så sker konvertering automatiskt. Alla satser Write(variabellista) kommer att skrivas på filen r.r DA2001 (Föreläsning 19) Datalogi 1 Hösten 2010 1 / 24

... En fil är en strukturerad typ där alla poster är av samma typ. Man kan alltså skriva hela poster på filen! Alla filer utom Input och Output skall deklareras. Exempel på fildeklarationer: TYPE fil = FILE OF elementtyp; VAR minfil : fil; bilregister : FILE OF car; infil : FILE OF Integer; utfil : FILE OF studentuppgifter; txt : TEXT; {Fördefinierad filtyp} DA2001 (Föreläsning 19) Datalogi 1 Hösten 2010 2 / 24

... filtyper kan vara Interna: deklareras och öppnas med Rewrite(filnamn) Då blocket, där filen öppnades, lämnas går innehållet förlorat. Externa: Ordnad (efter insättningsordning) lista på sekundärminnet. na ges som parametrar i programhuvudet och deklareras i deklarationsdelen. öppnas för läsning med Reset(filnamn) och för skrivning med Rewrite(filnamn) DA2001 (Föreläsning 19) Datalogi 1 Hösten 2010 3 / 24

... vanlig utbyggnad för ökad dynamik Man kan också öppna filer på följande sätt (inte standard): För läsning: Reset(filnamn, fysisktnamn); Man får ett fel om filen inte finns. För skrivning: Rewrite(filnamn,fysisktNamn); Om filen redan finns så raderas den (töms på sitt innehåll). Exempel: Reset(minFil, filnamn.p ); na stängs då man lämnar det block där de öppnades eller då satsen Close(filnamn) exekveras (inte standard). DA2001 (Föreläsning 19) Datalogi 1 Hösten 2010 4 / 24

... fördefinierade procedurer och funktioner Fördefinierade procedurer och funktioner: Infil Utfil ReSet(f) Read(f, varlista) ReadLn(f, varlista) Eof(f) EoLn(f) ReWrite(f) Write(f, varlista) WriteLn(f, varlista) Öppna filen f för läsning läs från filen f Endast för textfil TRUE om sista item har lästs Endast för textfil Öppna filen f för skrivning Skriv på filen f Endast för textfil DA2001 (Föreläsning 19) Datalogi 1 Hösten 2010 5 / 24

... filbufferten Varje fil har ett minnesutrymme som rymmer exakt en post, minnesutrymmet kallas filbuffert. Man kan komma åt innehållet i filbufferten med f^ Write(f, p1); Är ekvivalent med: f^ := p1; {kopiera p1 till filbufferten} Put(f); {skriv buffertens innehåll på filen} Read(f, p1); Är ekvivalent med: p1 := f^; {kopiera filbufferten till p1} Get(f); {hämta nästa post till filbuff} DA2001 (Föreläsning 19) Datalogi 1 Hösten 2010 6 / 24

... filbufferten (2) Ex: Operativsystemet hanterar filerna i block (eller sidor) med en storlek av tex 2048 byte. Då man läser från filen är den minsta enheten ett block. Blocket läses till en area i primärminnet och från denna till pascals filbuffert. Filbufferten i pascal rymmer exakt en post av filtypen. Då en fil har öppnats har vi följande situation: fil OS buffert filbuffert programvariabel DA2001 (Föreläsning 19) Datalogi 1 Hösten 2010 7 / 24

... filbufferten (3) Ex: Operativsystemet hanterar filerna i block (eller sidor) med en storlek av tex 2048 byte. Då man läser från filen är den minsta enheten ett block. Blocket läses till en area i primärminnet och från denna till pascals filbuffert. Filbufferten i pascal rymmer exakt en post av filtypen. Då en fil har öppnats har vi följande situation: Och fil OS buffert filbuffert programvariabel efter att Read(fil, programvariabel); utförs DA2001 (Föreläsning 19) Datalogi 1 Hösten 2010 8 / 24

... fil med binärt innehåll (skrivning) PROGRAM storeintegers (Input, Output, intfile); TYPE integerfile = FILE OF Integer; VAR intfile : integerfile; ReWrite(intFile); WriteLn( Heltal: (sluta med negativt tal) ); REPEAT Read(intFile^); IF intfile^ >= 0 THEN Put(intFile); UNTIL intfile^ < 0; END. DA2001 (Föreläsning 19) Datalogi 1 Hösten 2010 9 / 24

... fil med binärt innehåll (läsning) PROGRAM sumint(input,output,intfile); TYPE integerfile = FILE OF Integer; VAR intfile : integerfile; sum, tmp : Integer; Reset(intFile); sum := 0; WHILE NOT EoF(intFile) DO Read(intFile, tmp); sum := sum + tmp Writeln( Summan=, sum) END. DA2001 (Föreläsning 19) Datalogi 1 Hösten 2010 10 / 24

... fil med läsbart innehåll (läsning) PROGRAM sumint(input, Output, intfile); VAR intfile : TEXT; sum, tmp : Integer; Reset(intFile); sum := 0; WHILE NOT EoF(intFile) DO Read(intFile, tmp); sum := sum + tmp Writeln( Summan=, sum) END. DA2001 (Föreläsning 19) Datalogi 1 Hösten 2010 11 / 24

... fil med läsbart innehåll (2) Vi kan skriva filen intfile med hjälp av Emacs. Problem: Om det efter sista heltalet finns ett radbyte eller något annat tecken kommer vi att försöka läsa ett heltal. Eftersom det man hittar på filen inte är en siffra kommer det att bli felavbrott! Lösning på problemet: PROGRAM sumint(input, Output, intfile); VAR tal, sum : Integer; intfile : TEXT; PROCEDURE skipuntilnextdigit(var afile : TEXT); IF NOT EoF(aFile) THEN IF NOT (afile^ IN [ 0.. 9 ]) THEN Get(aFile); skipuntilnextdigit(afile) DA2001 (Föreläsning 19) Datalogi 1 Hösten 2010 12 / 24

... fil med läsbart innehåll (3) Reset(intFile); sum := 0; skipuntilnextdigit(intfile); WHILE NOT EoF(intFile) DO Read(intFile, tmp); sum := sum + tmp; skipuntilnextdigit(intfile) Writeln( Summan=, sum) END. Get, Read och ReadLn läser även EoLn- markeringar. DA2001 (Föreläsning 19) Datalogi 1 Hösten 2010 13 / 24

... interna filer En intern fil fungerar som en extern fil förutom att innehållet försvinner då filen stängs (då blocket, där den öppnades, lämnas) samt att den inte skall specificeras som programparameter då ju programparametrarna utgör kommunikation mellan program och yttre enheter. Ex: Gör ett program som i en text byter alla förekomster av { mot (* och alla } mot * ). Spar texten på en intern fil med alla byten utförda. Överför sedan den interna filen till den externa filen. Utbytet görs genom satserna IF fromfile^= { THEN Write(toFile, (* ) ELSE IF fromfile^= } THEN Write(toFile, *) ) ELSE Write(toFile, fromfile^); Get(fromFile); DA2001 (Föreläsning 19) Datalogi 1 Hösten 2010 14 / 24

... interna filer (2) PROGRAM ex(fil); VAR fil, tmp: TEXT; PROCEDURE copyfile(var fromfile, tofile: TEXT); WHILE NOT EoF(fromFile) DO IF EoLN(fromFile) THEN WriteLn(toFile); IF fromfile^= { THEN Write(toFile, (* ) ELSE IF fromfile^= } THEN Write(toFile, *) ) ELSE Write(toFile, fromfile^); Get(fromFile) END ReSet(fil); ReWrite(tmp); copyfile(fil, tmp); ReSet(tmp); ReWrite(fil); copyfile(tmp, fil); END. DA2001 (Föreläsning 19) Datalogi 1 Hösten 2010 15 / 24

... dynamiska variabler / pekare Då dynamiska variabler skrivs till en fil spars även pekare. Då posterna läses från filen till programmet hamnar posterna inte säkert på samma ställe i minnet där de fanns innan de sparades på filen. Därför måste pekare alltid återställas efter inläsning från fil. Ex.: Då ett program terminerar spars en lista på en fil och då programmet återstartas läser man in elementen från filen och återskapar listan. DA2001 (Föreläsning 19) Datalogi 1 Hösten 2010 16 / 24

... dynamiska variabler / pekare (2) PROGRAM ex(input, output, elementfile); TYPE elementptr = ^element; element = RECORD info : < user defined >; next : elementptr; listptr = ^list; list = RECORD first : elementptr; elfile = FILE OF element; VAR thelist : listptr; listfile : elfile; < diverse procedurer och funktioner > thelist := newlist; readlistfromfile(thelist, listfile); run; savelistonfile(thelist, listfile); END. DA2001 (Föreläsning 19) Datalogi 1 Hösten 2010 17 / 24

... dynamiska variabler / pekare (3) PROCEDURE readlistfromfile(alist: listptr; VAR afile:elfile); PROCEDURE readel(var elptr: elementptr); IF EoF(aFile) THEN elptr := NIL ELSE NEW(elPtr); Read(aFile, elptr^); readel(elptr^.next) END ReSet(aFile); readel(alist^.first) DA2001 (Föreläsning 19) Datalogi 1 Hösten 2010 18 / 24

... dynamiska variabler / pekare (4) PROCEDURE savelistonfile(alist: listptr; VAR afile:elfile); VAR elptr: elementptr; elptr := alist^.first; WHILE elptr <> NIL DO Write(aFile, elptr^); elptr := elptr^.next END DA2001 (Föreläsning 19) Datalogi 1 Hösten 2010 19 / 24

... dynamiska variabler / pekare (5) PROCEDURE run; < fråga efter kommando > IF valid(kommando) THEN IF kommando = < första alt > THEN exec1stcommand ELSE... ELSE error; IF kommando <> exit THEN run; Eftersom pekarnas värden inte är meningsfulla efter inläsning kan man utelämna dessa då posterna spars. DA2001 (Föreläsning 19) Datalogi 1 Hösten 2010 20 / 24

... dynamiska variabler / pekare (6) TYPE elementptr = ^element; item = RECORD < user defined > element = RECORD info : item; next : elementptr; listptr = ^list; list = RECORD first : elementptr; elfile = FILE OF item; DA2001 (Föreläsning 19) Datalogi 1 Hösten 2010 21 / 24

... dynamiska variabler / pekare (7) PROCEDURE readlistfromfile(alist: listptr; VAR afile: elfile); PROCEDURE readel(var elptr: elementptr); IF EoF(aFile) THEN elptr := NIL ELSE NEW(elPtr); Read(aFile, elptr^.info); readel(elptr^.next) END ReSet(aFile); readel(alist^.first) DA2001 (Föreläsning 19) Datalogi 1 Hösten 2010 22 / 24

... dynamiska variabler / pekare (8) PROCEDURE savelistonfile(alist: listptr; VAR afile: elfile); PROCEDURE writeel(elptr:elementptr); IF elptr <> NIL THEN Write(aFile, elptr^.info); writeel(elptr^.next) END ReWrite(aFile); writeel(alist^.first); DA2001 (Föreläsning 19) Datalogi 1 Hösten 2010 23 / 24

... dynamiska variabler / pekare (9) Obs att elementens minnesutrymme måste avallokeras om programmet inte terminerar. PROCEDURE savelistonfile(alist: listptr; VAR afile: elfile); PROCEDURE writeel(elptr:elementptr); IF elptr <> NIL THEN Write(aFile, elptr^.info); writeel(elptr^.next); Dispose(elPtr) END ReWrite(aFile); writeel(alist^.first); DA2001 (Föreläsning 19) Datalogi 1 Hösten 2010 24 / 24