{"id":6617,"date":"2024-02-05T18:44:00","date_gmt":"2024-02-05T17:44:00","guid":{"rendered":"https:\/\/msxitalia.org\/?p=6617"},"modified":"2024-02-22T15:01:52","modified_gmt":"2024-02-22T14:01:52","slug":"turbo-pascal-msx-lezione-7","status":"publish","type":"post","link":"https:\/\/msxitalia.org\/en\/turbo-pascal-msx-lezione-7\/","title":{"rendered":"Turbo Pascal MSX \u2013 Lesson 7"},"content":{"rendered":"\r\n<p class=\"wp-block-paragraph\"><img decoding=\"async\" data-src=\"https:\/\/msxitalia.org\/wp-content\/uploads\/2023\/12\/copertina-1-300x249.jpg\" class=\"wp-image-6376 aligncenter lazyload\" src=\"data:image\/gif;base64,R0lGODlhAQABAIAAAAAAAP\/\/\/yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\" alt=\"\" width=\"142\" height=\"118\" \/><noscript><img decoding=\"async\" class=\"wp-image-6376 aligncenter\" src=\"https:\/\/msxitalia.org\/wp-content\/uploads\/2023\/12\/copertina-1-300x249.jpg\" alt=\"\" width=\"142\" height=\"118\"><\/noscript><\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">I FILES (parte 1)<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Turbo Pascal fornisce un completo set di istruzione per la gestione dei file. Il tipo FILE \u00e8 rappresentato da una sequenza di oggetti dello stesso tipo, la dimensione di\u00a0 un file non \u00e8 determinata dal tipo, ma viene fornito un puntatore che si sposta lungo il file, per esempio quando viene aggiunto un dato, il puntatore si sposta al successivo, ma pu\u00f2 anche essere gestito dal programma in modo da recuperare le informazioni cercate.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Vediamo un esempio di definizione di FILE<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Type<\/strong><\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Names = string[30];<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>var<\/strong><\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Numeri: <strong>file of<\/strong> integer;<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">nomi: <strong>file of<\/strong> names;<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Nell\u2019esempio abbiamo definito due variabili, la prima numeri, che \u00e8 un file di tipo integer \u00a0e nomi che abbiamo definito come file di stringhe. Una volta che abbiamo definito uno o pi\u00f9 variabili di tipo file, vediamo come operare. Turbo pascal mette a disposizione un certo numero di procedure e funzioni con le quali manipolare il file:<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Considerando come file il file numeri che abbiamo dichiarato nell\u2019esempio, le procedure di assegnazione, lettura, scrittura ecc. sono le seguenti:<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Assign<strong> (Numeri, NomeDelFile)<\/strong><\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 NomeDelFile \u00e8 una variabile di tipo stringa che indica il nome del file, secondo gli standard ammessi dal sistema operativo. Il nome viene associato alla variabile di tipo file e tutte le operazioni di lettura e scrittura eseguite sulla variabile<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">modificheranno il file NomeDelFile. Per esempio<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>assign<\/strong>(Numeri,\u2019Prod.txt\u2019);<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Assegna univocamente la variabile Numeri al file \u2018Prod.txt\u2019 sul disco.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Rewrite<\/strong>(Numeri, dim);<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong>Se il file assegnato con Assign esiste, viene reinizializzato,\u00a0 il contenuto perso e il puntatore del file viene posto a zero.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Reset<\/strong>(Numeri,dim);<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Se il file aperto non esiste viene generato un errore, altrimenti il puntatore viene posto all\u2019inizio del file, ma il contenuto viene mantenuto.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Le procedure di Rewrite e Reset dispongono di un secondo parametro facoltativo (dim) che pu\u00f2 essere utilizzato con file non tipizzati e Consente di specificare il numero di byte per blocco. Ad esempio, \u00e8 possibile specificare una dimensione del blocco di 1 byte ed eseguire un BlockRead di 128 blocchi e ottenere lo stesso risultato della lettura di un blocco di 128 byte. Il vantaggio di questo secondo parametro \u00e8 che il programma non deve pi\u00f9 per gestire il troncamento o l\u2019eccedenza di un file perch\u00e9 la lunghezza del file \u00a0non \u00e8 divisibile per 128.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Read<\/strong>(Numeri,dato);<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 l\u2019informazione letta dal file, viene assegnata a una o pi\u00f9 variabili dato (separate da virgola), che devono essere del tipo indicato nella dichiarazione, una volta letto l\u2019informazione , il puntatore viene spostato al valore successivo.\u00a0\u00a0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Write<\/strong>(Numeri,dato);<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong>l\u2019informazione contenuta nella, o nelle variabili dato (separate da virgola), viene scritta nel file e il puntatore viene spostato alla posizione successiva<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Seek<\/strong>(Numeri,n);<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong>Seek sposta il puntatore del file sull&#8217;ennesimo componente del file. n \u00e8 un&#8217;espressione di tipo intero. La posizione del primo elemento di un\u00a0 file \u00e8 0. \u00c8 possibile utilizzare un valore per\u00a0 n che sia maggiore della lunghezza del file per scrivere oltre l\u2019ultimo elemento di un file. La dichiarazione seek(Numeri, DimensioneFile(Numeri); quindi posiziona il puntatore al file alla fine del file (FileSize restituisce il numero di componenti nel file e man mano che i componenti sono numerati da zero, il numero restituito \u00e8 maggiore di uno<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Flush<\/strong>(Numeri);<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Flush svuota il buffer interno del file Numeri e quindi assicura che il buffer del settore venga effettivamente scritto sul disco in caso di operazioni di scrittura dall&#8217;ultimo aggiornamento del disco. Flush assicura anche che L&#8217;operazione di lettura successiva eseguir\u00e0 effettivamente una lettura fisica dal file su disco. Flush non deve mai essere utilizzato su un file chiuso.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Close<\/strong>(Numeri);<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong>Chiude il file Numeri e aggiorna il contenuto del disco. E\u2019 sempre opportuno chiudere un file dopo l\u2019utilizzo in modo da non tenere occupati troppi puntatori<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Erase<\/strong>(Numeri);<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>rename<\/strong>(Numeri,NuovoNomeFile);<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Rinomina il file Numeri, con il nome contenuto nella variabile di tipo string, NuovoNomeFile. Quindi tutte le operazioni verranno effettuate sul nuovo file. Rename va utilizzato su un file aperto. E\u2019 compito del programmatore assicurarsi che NovoNomeFile non esista gi\u00e0 sul disco<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Vengono poi fornite una serie di funzioni standard che operano sui file:<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Eof<\/strong>(Numeri);<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong>Funzione booleana che restituisce True se il puntatore al file \u00e8 posizionato in corrispondenza della fine del file su disco, ovvero oltre l&#8217;ultimo componente del file. altrimenti EOF restituisce False.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>FilePos<\/strong>(Numeri);<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong>restituisce un valore intero che indica la posizione del puntatore, se all\u2019inizio del file, restituisce 0<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>File Size<\/strong>(Numeri);<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/strong>restituisce un valore intero che indica la dimensione del file espressa come numero dei dati di cui \u00e8 composto un file.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Una menzione particolare \u00e8 necessaria per i file di testo che si dichiarano con il tipo Text. \u00a0I file di testo hanno la particolarit\u00e0 di utilizzare le stesse istruzioni che si utilizzano per scrivere del testo sullo schermo, con la differenza che va indicato il file di destinazione. Ad esempio per stampare su schermo una costante stringa utilizziamo l\u2019istruzione <strong>Write <\/strong>\u00a00 <strong>Writeln\u00a0 <\/strong>se vogliamo un ritorno a capo dopo la stampa<strong>, <\/strong>in questo modo:<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Write<\/strong>(\u2018Hello World!\u2019);<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">oppure<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Writeln<\/strong>(\u2018Hello World!\u2019);<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">per scrivere in un file di testo le stesse informazioni, \u00e8 sufficiente dichiarare un file di testo e inizializzarlo, nello stesso modo che abbiamo visto prima:<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Var<\/strong> FileDiTesto testo : <strong>Text<\/strong> {dichiariamo un file di tipo text}<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">\u2026<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Assign<\/strong> (FileDiTesto,\u2019testo.txt\u2019); {assegniamo al file il nome su disco \u2018testo.txt\u2019}<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">A questo punto\u00a0 per scrivere nel file non faremo altro che scrivere utilizzando le parole chiave Write o Writeln passando come parametro, l\u2019identificatore del file prima dei dati da scrivere:<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Write<\/strong>(FileDiTesto,\u2018Hello World!\u2019);<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">oppure<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Writeln<\/strong>(FileDiTesto,\u2018Hello World!\u2019);<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Il file che otterremo sar\u00e0 organizzato logicamente in righe di testo terminate con i caratteri CR LF (asci 13 e ascii 10) ovvero ritorno a capo e avanzamento di riga.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Naturalmente un file di questo tipo pu\u00f2 essere aperto e modificato come un qualsiasi altro file di testo.<\/p>\r\n","protected":false},"excerpt":{"rendered":"<p>I FILES (parte 1) Turbo Pascal fornisce un completo set di istruzione per la gestione dei file. Il tipo FILE \u00e8 rappresentato da una sequenza di oggetti dello stesso tipo, la dimensione di\u00a0 un file non \u00e8 determinata dal tipo, ma viene fornito un puntatore che si sposta lungo il file, per esempio quando viene [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":6619,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"off","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"categories":[3,5],"tags":[],"dipi_cpt_category":[],"class_list":["post-6617","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programmazione","category-turbo-pascal"],"_links":{"self":[{"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/posts\/6617","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/comments?post=6617"}],"version-history":[{"count":4,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/posts\/6617\/revisions"}],"predecessor-version":[{"id":6622,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/posts\/6617\/revisions\/6622"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/media\/6619"}],"wp:attachment":[{"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/media?parent=6617"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/categories?post=6617"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/tags?post=6617"},{"taxonomy":"dipi_cpt_category","embeddable":true,"href":"https:\/\/msxitalia.org\/en\/wp-json\/wp\/v2\/dipi_cpt_category?post=6617"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}