PROGRAMMIAMO
C++ - File testo: Definizioni
File in C e in C++

La gestione dei file è piuttosto diversa in C e in C++. Sebbene le operazioni che si possono effettuare (apertura, chiusura, scrittura, lettura) siano sostanzialmente le stesse, il C utilizza un diverso insieme di funzioni e un meccanismo un po' differente per la gestione dei file. Nel seguito qui faremo riferimento alle istruzioni del C++, rimandando il lettore interessato a questo sito per una spiegazione dettagliata delle istruzioni del C per la gestione file.

Definizioni preliminari

Un file è un insieme di dati memorizzati su un supporto di memoria di massa non volatile (cioè che non si cancella allo spegnimento del computer). Esempi di memorie di massa sono gli hard disk, i cd, i dvd, le memorie flash usb.

I file sono ordinati all'interno di cartelle (o directory). Ogni file è identificato da un nome, comprensivo di una estensione (le ultime 3 o 4 lettere del nome dopo il punto). Esempi:

- dati.txt (estensione txt)
- foto.jpg (estensione jpg)
- documento.doc (estensione doc)
- pagina.html (estensione html)

L'estensione specifica il tipo di dati contenuto nel file: per esempio jpg per i file immagine in formato jpeg, doc per i file generati con Microsoft Word, html per le pagine in linguaggio html. In pratica l'estensione serve solo al sistema operativo per associare a quel dato tipo di file un programma, che viene eseguito automaticamente quando l'utente fa doppio clic sul nome del file (es. se il file ha estensione doc, il sistema operativo cercherà di aprire il file con Word o con un altro programma di videoscrittura associato a tale estensione).

File di testo

Un file di testo è un file che contiene solo caratteri, senza nessuna formattazione. In pratica un file di testo contiene, come dice il nome, semplice testo, senza effetti grafici, come grassetto, corsivo eccetera.

I file di testo hanno spesso, ma non obbligatoriamente, estensione txt e costituiscono un formato universale, in quanto possono essere letti o scritti da qualsiasi editor di testi. Viceversa gli altri formati, per esempio il formato doc di Word, possono essere modificati solo disponendo di Word o di un programma compatibile.

Codici e codifiche: ASCII e Unicode

I file di testo rappresentano i caratteri (caratteri alfanumerici, simboli non alfabetici etc.) mediante sequenze di bit, cioè ogni carattere viene codificato in una stringa binaria. Affinché un file di testo possa essere interpretato correttamente, occorre che chi l'ha scritto e chi lo legge condividano la stessa codifica.

Alle origini dell'era informatica era stato deciso di rappresentare ogni carattere usando 7 bit (più un bit riservato per il controllo di parità) in base al famoso codice ASCII. Il codice ASCII originario permetteva di rappresentare solo 27 = 128 caratteri, più che sufficienti per l'alfabeto inglese, ma del tutto inadeguati per le altre lingue del mondo. Tale problema fece sì che il codice ASCII venisse ampliato, in modo più o meno arbitrario, da diversi produttori di computer, utilizzando dapprima gli interi 8 bit per la rappresentazione del codice (ottenendo in questo modo una codifica di 28 = 256 caratteri) e in seguito usando più di un byte per rappresentare ogni carattere.

In tale modo però si venne ben presto a creare un problema di compatibilità, che rendeva difficile la condivisone di file di testo fra macchine diverse che utilizzavano una diversa codifica. Ciò divenne particolarmente grave con l'avvento di internet e il conseguente scambio di file (le stesse pagine html sono file di testo) fra diversi computer.

Per affrontare il problema della compatibilità vennero proposte diverse soluzioni, fra le quali quella attualmente più utilizzata è nota come Unicode. Lo standard Unicode (specificato dallo Unicode Consortium) è essenzialmente un'iniziativa il cui scopo è la creazione di un repertorio unificato di tutti i caratteri usati dall'umanità, comprendendo quelli delle lingue scritte contemporanee, quelle del passato, qualche lingua immaginaria e con abbastanza spazio per incorporare lingue non ancora codificate. Lo standard attuale prevede la possibilità di usare 1.114.112 (un milione centoquattordicimila centododici) codici diversi... una quantità davvero enorme!

Senza voler approfondire ulteriormente la questione, occorre però osservare che il codice Unicode risolve solo parzialmente il problema della portabilità dei file di testo fra macchine diverse, in quanto per interpretare correttamente un file di testo in formato Unicode occorre sapere in quale sottocodice Unicode (si parla più correttamente di piano di appartenenza) è stata codificata la pagina. Così per esempio il sottocodice usato per le lingue occidentali non è lo stesso utilizzato per gli alfabeti orientali. Nella maggior parte dei casi il software tenta di "indovinare" il sottocodice di appartenenza in base alla provenienza della pagina (es. per le pagine internet), in base a informazioni codificate nella pagina stessa o utilizzando le impostazioni locali (lingua, paese di appartenenza) della macchina su cui il file viene visualizzato. Va da sé che gli errori sono frequenti e che i file di testo non sono affatto uno strumento di comunicazione "universale" come si potrebbe credere.

Per quanto riguarda i file di testo e i programmi compilati con l'opzione console applications (cioè tutti i casi considerati fin qui), il dev-C++ supporta solo il codice ASCII. Questo significa che l'uso di caratteri non codificato in ASCII standard (ad esempio lettere accentate dell'alfabeto italiano) provoca visualizzazioni non corrette.

Per approfondire: Unicode e il problema della codifica

 

successiva

Sito realizzato in base al template offerto da

http://www.graphixmania.it