{"id":206,"date":"2022-01-20T15:54:13","date_gmt":"2022-01-20T14:54:13","guid":{"rendered":"https:\/\/wiskunst.hjgsoft.nl\/?page_id=206"},"modified":"2022-01-24T09:31:45","modified_gmt":"2022-01-24T08:31:45","slug":"bestanden","status":"publish","type":"page","link":"https:\/\/wiskunst.nl\/index.php\/programmeren1\/programmeren\/bestanden\/","title":{"rendered":"Bestanden"},"content":{"rendered":"<p>Vaak zal het noodzakelijk zijn om bestanden te benaderen, enerzijds om daar informatie uit te halen, anderzijds om gegevens in op te slaan.<br \/>\nIn Pascal wordt onderscheid gemaakt tussen het benaderen van bestanden om te lezen en om te schrijven.<br \/>\nVerder kent Pascal 3 verschillende soorten bestanden: tekst-bestanden, binaire-bestanden en ongedefinieerde bestanden.<br \/>\nDe eerste soort gebruik je voor ascii-achtige bestanden. De tweede voor bestanden met een bepaalde structuur. De derde gebruik je voornamelijk voor bestandsbeheerachtige zaken, dus voor bestanden waar je van te voren niet weet hoe ze in elkaar zitten.<br \/>\nIn deze paragraaf beperken we ons tot de eerste soort. Om met een tekstbestand te gaan werken moet je eerst weten of je naar een bestand gaat schrijven of uit een bestand gaat lezen.<br \/>\nDe stappen die je moet volgen zijn de volgende:<\/p>\n<p>1. Defienieer een tekst-bestand-variabele.<br \/>\n2. Ken de variabele toe aan een bestand.<br \/>\n3. Open het bestand om te lezen of schrijven.<br \/>\n4. Lees of schrijf naar het bestand (via de variabele).<br \/>\n5. Sluit het bestand.<\/p>\n<p>ad 1.:\u00a0<b>Var tf: text;<\/b><br \/>\nhiermee definieer je een variabele\u00a0<i>tf<\/i>\u00a0van het type\u00a0<b>text<\/b>, dat aangeeft dat je hiermee een ascii-bestand kan benaderen.<br \/>\nad 2.:\u00a0<b>assign(tf,[pad]\/[bestandsnaam]);<\/b><br \/>\nmet de opdracht assign koppel je de text-variabele aan een (ascii-)bestand.<br \/>\nad 3.:\u00a0<b>reset(tf);<\/b>\u00a0of\u00a0<b>rewrite(tf);<\/b>\u00a0met\u00a0<b>reset<\/b>\u00a0open je het bestand om te lezen, met\u00a0<b>rewrite<\/b>\u00a0open je het bestand om te schrijven. Als in het laatste geval het bestand al bestaat, dan wordt deze hiermee overschreven!<br \/>\nad 4.:\u00a0<b>readln(tf,regel);<\/b>\u00a0of\u00a0<b>writeln(tf,regel);<\/b>,<br \/>\nom resp. een regel tekst uit het bestand te lezen, dan wel een regel tekst naar het bestand te schrijven.<br \/>\nad 5.:\u00a0<b>close(tf);<\/b><br \/>\nhiermee sluit je het bestand en geef je het weer vrij voor het besturingssysteem.<\/p>\n<p>In het eerste voorbeeld gaan we een bestand openen en er drie regels tekst inzetten:<\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace;\"><span style=\"font-size: 12pt;\">program p10_1;<b><br \/>\n<\/b><\/span><span style=\"font-size: 12pt;\">var tf: text;<br \/>\n<\/span><span style=\"font-size: 12pt;\">begin<\/span><\/span><br \/>\n<span style=\"font-size: 12pt; font-family: 'courier new', courier, monospace;\">\u00a0 assign(tf,&#8217;c:\\tp3\\test.txt&#8217;);<\/span><br \/>\n<span style=\"font-size: 12pt; font-family: 'courier new', courier, monospace;\">\u00a0 rewrite(tf);<\/span><br \/>\n<span style=\"font-size: 12pt; font-family: 'courier new', courier, monospace;\">\u00a0 writeln(tf,&#8217;Dit is een test.&#8217;);<\/span><br \/>\n<span style=\"font-size: 12pt; font-family: 'courier new', courier, monospace;\">\u00a0 writeln(tf);<\/span><br \/>\n<span style=\"font-size: 12pt; font-family: 'courier new', courier, monospace;\">\u00a0 writeln(tf,&#8217;turbo pascal&#8217;);<\/span><br \/>\n<span style=\"font-size: 12pt; font-family: 'courier new', courier, monospace;\">\u00a0 close(tf);<\/span><br \/>\n<span style=\"font-size: 12pt; font-family: 'courier new', courier, monospace;\">end.<\/span><\/p>\n<p>Wanneer je nu met het kladblok\u00a0<i>test.txt<\/i>\u00a0opent, dan zie je dat er 3 regels tekst in staan, hoewel de tweede regel leeg is.<\/p>\n<p>In het volgende voorbeeld gaan we\u00a0<i>test.txt<\/i>\u00a0uitlezen:<\/p>\n<p><span style=\"font-size: 12pt; font-family: 'courier new', courier, monospace;\">program p10_2;<b><br \/>\n<\/b>type s80 = string[80];<br \/>\nvar<\/span><br \/>\n<span style=\"font-size: 12pt; font-family: 'courier new', courier, monospace;\">\u00a0 tf: text;<\/span><br \/>\n<span style=\"font-size: 12pt; font-family: 'courier new', courier, monospace;\">\u00a0 regel: s80;<br \/>\nbegin<\/span><br \/>\n<span style=\"font-size: 12pt; font-family: 'courier new', courier, monospace;\">\u00a0 assign(tf,&#8217;c:\\tp3\\test.txt&#8217;);<\/span><br \/>\n<span style=\"font-size: 12pt; font-family: 'courier new', courier, monospace;\">\u00a0 reset(tf);<\/span><br \/>\n<span style=\"font-size: 12pt; font-family: 'courier new', courier, monospace;\">\u00a0 while not eof(tf) do<\/span><br \/>\n<span style=\"font-size: 12pt; font-family: 'courier new', courier, monospace;\">\u00a0 begin<\/span><br \/>\n<span style=\"font-size: 12pt; font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 readln(tf,regel);<\/span><br \/>\n<span style=\"font-size: 12pt; font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 writeln(regel);<\/span><br \/>\n<span style=\"font-size: 12pt; font-family: 'courier new', courier, monospace;\">\u00a0 end;<\/span><br \/>\n<span style=\"font-size: 12pt; font-family: 'courier new', courier, monospace;\">\u00a0 close(tf);<\/span><br \/>\n<span style=\"font-size: 12pt; font-family: 'courier new', courier, monospace;\">end.<\/span><\/p>\n<p>Omdat je vaak niet weet hoe groot een bestand is wil je het uitlezen tot het eind. Met de\u00a0<b>while not eof(tf)<\/b>-constructie wordt dit bereikt. De\u00a0<b>eof<\/b>-functie geeft de waarde\u00a0<i>true<\/i>\u00a0als je aan het einde van het bestand bent aangekomen (End Of File).<\/p>\n<p>Wanneer je een bestand probeert te benaderen om te lezen en dit bestand bestaat niet, dan krijg je een foutmelding (run-time error).<br \/>\nAls je naar een bestand wilt schrijven dat al bestaat, is dat misschien niet wenselijk.<br \/>\nWe zouden in beide gevallen een manier willen hebben om vooraf te kunnen controleren of een bestand al bestaat.<br \/>\nDit kunnen we doen door de standaard-controle zoals ingebouwd door de compiler te omzeilen en deze controle zelf uit te voeren.<br \/>\nDit gaat als volgt:<\/p>\n<p>Direct voor het reset- of rewrite-statement zet je\u00a0<b>{$I-}<\/b>\u00a0neer om de compiler-controle uit te schakelen. Direct na een van statments zet je\u00a0<b>{$I+}<\/b>\u00a0neer om de compiler-controle weer te activeren.<br \/>\nHierna lees je de ingebouwde virabele IOResult uit om te kijken of zich een fout heeft voorgedaan.<\/p>\n<p>Laten we e.e.a. eens in een functie\u00a0<b>Bestaat<\/b>\u00a0implementeren:<\/p>\n<p><span style=\"font-family: 'courier new', courier, monospace;\"><span style=\"font-size: 12pt;\">function Bestaat(bn: s80): Boolean;<br \/>\n<\/span><span style=\"font-size: 12pt;\">\u00a0 var b: file;<br \/>\n<\/span><span style=\"font-size: 12pt;\">begin<\/span><\/span><br \/>\n<span style=\"font-size: 12pt; font-family: 'courier new', courier, monospace;\">\u00a0 assign(b,bn);<\/span><br \/>\n<span style=\"font-size: 12pt; font-family: 'courier new', courier, monospace;\">\u00a0 {$I-}<\/span><br \/>\n<span style=\"font-size: 12pt; font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 reset(b);<\/span><br \/>\n<span style=\"font-size: 12pt; font-family: 'courier new', courier, monospace;\">\u00a0 {$I+}<\/span><br \/>\n<span style=\"font-size: 12pt; font-family: 'courier new', courier, monospace;\">\u00a0 close(b);<\/span><br \/>\n<span style=\"font-size: 12pt; font-family: 'courier new', courier, monospace;\">\u00a0 if IOResult = 0 then<\/span><br \/>\n<span style=\"font-size: 12pt; font-family: 'courier new', courier, monospace;\">\u00a0 begin<\/span><br \/>\n<span style=\"font-size: 12pt; font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 Bestaat := true;<\/span><br \/>\n<span style=\"font-size: 12pt; font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 close(b);<\/span><br \/>\n<span style=\"font-size: 12pt; font-family: 'courier new', courier, monospace;\">\u00a0 end<\/span><br \/>\n<span style=\"font-size: 12pt; font-family: 'courier new', courier, monospace;\">\u00a0 else<\/span><br \/>\n<span style=\"font-size: 12pt; font-family: 'courier new', courier, monospace;\">\u00a0 \u00a0 Bestaat := false;<\/span><br \/>\n<span style=\"font-size: 12pt; font-family: 'courier new', courier, monospace;\">end;<\/span><\/p>\n<p>Nu kun je met de constructie\u00a0<b>if Bestaat(&#8217;test.txt&#8217;) then &#8230;<\/b>\u00a0kijken of\u00a0<i>test.txt<\/i>\u00a0in de huidige directory bestaat.<br \/>\nDe regel\u00a0<b>var b: file;<\/b>\u00a0declareerd een ongedefinieerd bestand.<\/p>\n<h2>Oefeningen.<\/h2>\n<p><b>10.1<\/b><br \/>\nSchrijf een programma dat het aantal regels in een tekstbestand telt. Het programma moet om de naam van het bestand vragen. [<a href=\"https:\/\/wiskunst.nl\/index.php\/programmeren\/oefeningen\/#10.1\" target=\"_blank\" rel=\"noopener\">Antwoord<\/a>]\n<p><b>10.2<\/b><br \/>\nSchrijf een programma dat een Pascal-programma, waarvan de naam wordt gevraagd, voorziet van regelnummers. Het *.pas-bestand moet dezelfde naam behouden, maar nu met de extensie &#8220;.num&#8221;.<br \/>\nMet de functie\u00a0<b>copy([string-var],[start-pos],[aantal-kar]<\/b>\u00a0krijg je een nieuwe string die bestaat uit de deelstring van\u00a0<i>[string-var]<\/i>\u00a0vanaf positie\u00a0<i>[start-pos]<\/i>\u00a0over een lengte van\u00a0<i>[aantal-kar]<\/i>. Zo levert\u00a0<b>copy(&#8216;hallo&#8217;,1,3)<\/b>\u00a0de string\u00a0<i>&#8216;hal&#8217;<\/i>\u00a0op. [<a href=\"https:\/\/wiskunst.nl\/index.php\/programmeren\/oefeningen\/#10.2\" target=\"_blank\" rel=\"noopener\">Antwoord<\/a>]\n<p> [<a href=\"https:\/\/wiskunst.nl\/index.php\/programmeren\/functies\/\">Functies<\/a>] &lt;&#8211; &#8211;&gt; [<a href=\"https:\/\/wiskunst.nl\/index.php\/programmeren\/recursie\/\">Recursie<\/a>]\n","protected":false},"excerpt":{"rendered":"<p>Vaak zal het noodzakelijk zijn om bestanden te benaderen, enerzijds om daar informatie uit te halen, anderzijds om gegevens in op te slaan. In Pascal wordt onderscheid gemaakt tussen het benaderen van bestanden om te lezen en om te schrijven. Verder kent Pascal 3 verschillende soorten bestanden: tekst-bestanden, binaire-bestanden en ongedefinieerde bestanden. De eerste soort [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":185,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"templates\/template-full-width.php","meta":{"_lmt_disableupdate":"","_lmt_disable":"","footnotes":""},"class_list":["post-206","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Bestanden - Wiskunst<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/wiskunst.nl\/index.php\/programmeren1\/programmeren\/bestanden\/\" \/>\n<meta property=\"og:locale\" content=\"nl_NL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Bestanden - Wiskunst\" \/>\n<meta property=\"og:description\" content=\"Vaak zal het noodzakelijk zijn om bestanden te benaderen, enerzijds om daar informatie uit te halen, anderzijds om gegevens in op te slaan. In Pascal wordt onderscheid gemaakt tussen het benaderen van bestanden om te lezen en om te schrijven. Verder kent Pascal 3 verschillende soorten bestanden: tekst-bestanden, binaire-bestanden en ongedefinieerde bestanden. De eerste soort [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wiskunst.nl\/index.php\/programmeren1\/programmeren\/bestanden\/\" \/>\n<meta property=\"og:site_name\" content=\"Wiskunst\" \/>\n<meta property=\"article:modified_time\" content=\"2022-01-24T08:31:45+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Geschatte leestijd\" \/>\n\t<meta name=\"twitter:data1\" content=\"4 minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/wiskunst.nl\\\/index.php\\\/programmeren1\\\/programmeren\\\/bestanden\\\/\",\"url\":\"https:\\\/\\\/wiskunst.nl\\\/index.php\\\/programmeren1\\\/programmeren\\\/bestanden\\\/\",\"name\":\"Bestanden - Wiskunst\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wiskunst.nl\\\/#website\"},\"datePublished\":\"2022-01-20T14:54:13+00:00\",\"dateModified\":\"2022-01-24T08:31:45+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/wiskunst.nl\\\/index.php\\\/programmeren1\\\/programmeren\\\/bestanden\\\/#breadcrumb\"},\"inLanguage\":\"nl-NL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/wiskunst.nl\\\/index.php\\\/programmeren1\\\/programmeren\\\/bestanden\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/wiskunst.nl\\\/index.php\\\/programmeren1\\\/programmeren\\\/bestanden\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/wiskunst.nl\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Programmeren\",\"item\":\"https:\\\/\\\/wiskunst.nl\\\/index.php\\\/programmeren1\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Programmeren met Pascal\",\"item\":\"https:\\\/\\\/wiskunst.nl\\\/index.php\\\/programmeren1\\\/programmeren\\\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Bestanden\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/wiskunst.nl\\\/#website\",\"url\":\"https:\\\/\\\/wiskunst.nl\\\/\",\"name\":\"Wiskunst\",\"description\":\"2\u221e\u2227&gt;\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/wiskunst.nl\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"nl-NL\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Bestanden - Wiskunst","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/wiskunst.nl\/index.php\/programmeren1\/programmeren\/bestanden\/","og_locale":"nl_NL","og_type":"article","og_title":"Bestanden - Wiskunst","og_description":"Vaak zal het noodzakelijk zijn om bestanden te benaderen, enerzijds om daar informatie uit te halen, anderzijds om gegevens in op te slaan. In Pascal wordt onderscheid gemaakt tussen het benaderen van bestanden om te lezen en om te schrijven. Verder kent Pascal 3 verschillende soorten bestanden: tekst-bestanden, binaire-bestanden en ongedefinieerde bestanden. De eerste soort [&hellip;]","og_url":"https:\/\/wiskunst.nl\/index.php\/programmeren1\/programmeren\/bestanden\/","og_site_name":"Wiskunst","article_modified_time":"2022-01-24T08:31:45+00:00","twitter_card":"summary_large_image","twitter_misc":{"Geschatte leestijd":"4 minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/wiskunst.nl\/index.php\/programmeren1\/programmeren\/bestanden\/","url":"https:\/\/wiskunst.nl\/index.php\/programmeren1\/programmeren\/bestanden\/","name":"Bestanden - Wiskunst","isPartOf":{"@id":"https:\/\/wiskunst.nl\/#website"},"datePublished":"2022-01-20T14:54:13+00:00","dateModified":"2022-01-24T08:31:45+00:00","breadcrumb":{"@id":"https:\/\/wiskunst.nl\/index.php\/programmeren1\/programmeren\/bestanden\/#breadcrumb"},"inLanguage":"nl-NL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wiskunst.nl\/index.php\/programmeren1\/programmeren\/bestanden\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/wiskunst.nl\/index.php\/programmeren1\/programmeren\/bestanden\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/wiskunst.nl\/"},{"@type":"ListItem","position":2,"name":"Programmeren","item":"https:\/\/wiskunst.nl\/index.php\/programmeren1\/"},{"@type":"ListItem","position":3,"name":"Programmeren met Pascal","item":"https:\/\/wiskunst.nl\/index.php\/programmeren1\/programmeren\/"},{"@type":"ListItem","position":4,"name":"Bestanden"}]},{"@type":"WebSite","@id":"https:\/\/wiskunst.nl\/#website","url":"https:\/\/wiskunst.nl\/","name":"Wiskunst","description":"2\u221e\u2227&gt;","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/wiskunst.nl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"nl-NL"}]}},"_links":{"self":[{"href":"https:\/\/wiskunst.nl\/index.php\/wp-json\/wp\/v2\/pages\/206","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wiskunst.nl\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/wiskunst.nl\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/wiskunst.nl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wiskunst.nl\/index.php\/wp-json\/wp\/v2\/comments?post=206"}],"version-history":[{"count":7,"href":"https:\/\/wiskunst.nl\/index.php\/wp-json\/wp\/v2\/pages\/206\/revisions"}],"predecessor-version":[{"id":528,"href":"https:\/\/wiskunst.nl\/index.php\/wp-json\/wp\/v2\/pages\/206\/revisions\/528"}],"up":[{"embeddable":true,"href":"https:\/\/wiskunst.nl\/index.php\/wp-json\/wp\/v2\/pages\/185"}],"wp:attachment":[{"href":"https:\/\/wiskunst.nl\/index.php\/wp-json\/wp\/v2\/media?parent=206"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}