Struttura a record. File ad accesso diretto. Modalità di apertura. Modalità di apertura



Documenti analoghi
Gestione dei File in C

Gestione dei File. dischi nastri cd

Sistemi Operativi. Interfaccia del File System FILE SYSTEM : INTERFACCIA. Concetto di File. Metodi di Accesso. Struttura delle Directory

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

Strutturazione logica dei dati: i file

Appunti tratti dal videocorso on-line di Algoritmi e Programmazione Avanzata By ALeXio

Allocazione dinamica della memoria - riepilogo

CREAZIONE DI UN DATABASE E DI TABELLE IN ACCESS

Matlab: Gestione avanzata dei file

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Introduzione alla programmazione in C

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a prof.

Funzioni matlab per la gestione dei file. Informatica B Prof. Morzenti

Struttura dati FILE. Concetto di FILE

WORD per WINDOWS95. Un word processor e` come una macchina da scrivere ma. con molte più funzioni. Il testo viene battuto sulla tastiera

I file di dati. Unità didattica D1 1

MANUALE UTENTE Fiscali Free

MANUALE ESSE3 Gestione Registro delle lezioni

Le stringhe. Le stringhe

Dove die( stringa ) è una funzione di utilità del php che stampa la stringa e fa terminare lo script.

Il Sistema Operativo: il File System

Inserimento dei dati

Funzioni in C. Violetta Lonati

Il personale docente e la segreteria didattica per effettuare la gestione degli scrutini dovranno eseguire semplici operazioni.

Entrare nel sistema. Clicca su Entra per entrare nel sistema. PAGINA 1

Guida rapida per i docenti all'uso della piattaforma di e-learning dell'istituto Giua

Access. Microsoft Access. Aprire Access. Aprire Access. Aprire un database. Creare un nuovo database

Punto Print Il programma per stampare. Documentazione Tecnica

Corso di Fondamenti di Informatica

La struttura dati ad albero binario

TEST: Word & Excel Tutti i diritti riservati. Computer Facile -

ENTRARE NEL SISTEMA. Clicca su Entra per entrare nel sistema. PAGINA 1

Gestione Risorse Umane Web

MANUALE D'USO DEL PROGRAMMA IMMOBIPHONE

Liberare la memoria allocata dinamicamente.

CERTIFICATI DIGITALI. Manuale Utente

LA GESTIONE DELLE VISITE CLIENTI VIA WEB

puntatori Lab. Calc. AA 2007/08 1

Sistema Informativo Gestione Fidelizzazione Clienti MANUALE D USO

L archiviazione della posta elettronica può aiutarci a recuperare spazio senza costringerci a cestinare documenti importanti

STAMPA UNIONE DI WORD

Cosa è un foglio elettronico

Fogli Elettronici: MS Excel

Uso del Computer e Gestione dei File. Uso del Computer e Gestione dei File. Federica Ricca

Microsoft Office XP. dott. ing. Angelo Carpenzano. La suite Microsoft Office XP

Introduzione al Linguaggio C

DOCUMENTO ESERCITAZIONE ONENOTE. Utilizzare Microsoft Offi ce OneNote 2003: esercitazione rapida

7.4 Estrazione di materiale dal web

CMS ERMES INFORMATICA

I puntatori e l allocazione dinamica di memoria

Fondamenti di Informatica T-1, 2009/2010 Modulo 2 Prova d Esame 5 di Giovedì 15 Luglio 2010 tempo a disposizione 2h30'

Il sistema operativo: interazione con l utente

Il software ideale per la gestione delle prenotazioni GUIDA UTENTE

(Esercizi Tratti da Temi d esame degli ordinamenti precedenti)

MANUALE UTENTE. TeamPortal Liste Distribuzioni

BMSO1001. Virtual Configurator. Istruzioni d uso 02/10-01 PC

LA RICLASSIFICAZIONE DEI SALDI CONTABILI CON MICROSOFT ACCESS 2007

Gestione del file system

MICROSOFT WORD LA STAMPA UNIONE

CORSO ACCESS PARTE II. Esistono diversi tipi di aiuto forniti con Access, generalmente accessibili tramite la barra dei menu (?)

2 - Modifica Annulla Selezione finestra. S.C.S. - survey CAD system FIGURA 2.1

PROGRAMMA GESTIONE TURNI MANUALE UTENTE. Programma Gestione Turni Manuale Utente versione 1.1

SOMMARIO... 3 INTRODUZIONE...

Olga Scotti. Basi di Informatica. Excel

Esempio: Array di struct

LA RICLASSIFICAZIONE DI BILANCIO CON MICROSOFT ACCESS

Programmazione. Laboratorio. Roberto Cordone DI - Università degli Studi di Milano

Banca dati Professioniste in rete per le P.A. Guida all uso per le Professioniste

1.0 GUIDA PER L UTENTE

Manuale Amministratore Legalmail Enterprise. Manuale ad uso degli Amministratori del Servizio Legalmail Enterprise

La Stampa Unione. Individuare la lista indirizzi per la Stampa Unione

Laboratorio di Algoritmi e Strutture Dati

Opuscolo Outlook Express

Esempio: dest = parolagigante, lettere = PROVA dest (dopo l'invocazione di tipo pari ) = pprrlogvgante

Corso di Alfabetizzazione Informatica

Indirizzo di una funzione. Puntatori a funzioni. Definizione di variabili. Definizione di variabili

Corso base di informatica

costruttori e distruttori

Manuale Utente Amministrazione Trasparente GA

11/02/2015 MANUALE DI INSTALLAZIONE DELL APPLICAZIONE DESKTOP TELEMATICO VERSIONE 1.0

Access. P a r t e p r i m a

. A primi passi con microsoft a.ccepss SommarIo: i S 1. aprire e chiudere microsoft access Start (o avvio) l i b tutti i pro- grammi

Dati testuali. Caratteri e stringhe. Tipi di dato testuali. Dati testuali. Il sistema dei tipi C. Rappresentazione dei testi

LA CORRISPONDENZA COMMERCIALE

Il sistema C.R.M. / E.R.M.

Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli

A ridurre le dimensioni del database. A ordinare i record secondo criteri fissati sui campi. A facilitare le operazioni di inserimento dei dati

Per effettuare la stampa di una cartella di lavoro si accede al comando. Stampa dal menu File o si utilizza il pulsante omonimo sulla barra

DISPENSA PER MICROSOFT WORD 2010

MODULO 5 ACCESS Basi di dati. Lezione 4

per immagini guida avanzata Uso delle tabelle e dei grafici Pivot Geometra Luigi Amato Guida Avanzata per immagini excel

FUNZIONI DI IMPAGINAZIONE DI WORD

MANUALE PORTALE UTENTE IMPRENDITORE

Blocco Note Blocco Note

La memoria centrale (RAM)

1. Il Client Skype for Business

Esercizio 1. Esercizio 1

Manuale di istruzioni sulle maschere per il calcolo del punteggio e del voto (unico) degli studenti che sostengono la Prova nazionale 2011

Corso di Informatica

Transcript:

Struttura a record 2 File ad accesso diretto Il file è organizzato in record aventi tutti la stessa struttura e quindi dimensione record 0 record 1 record 2 Ver. 2.4 2010 - Claudio Fornaro - Corso di programmazione in C Ogni record viene letto/scritto in un unica operazione (tutti i suoi byte insieme) L accesso al record N-esimo è molto veloce in quanto per determinare dove esso inizia (il suo offset) basta calcolare: N * L (dove L è la lunghezza dei record) offset: distanza (in byte) dall inizio del file Modalità di apertura 3 Modalità di apertura 4 Nella fopen si indica che si usano file binari (dati grezzi) specificando i modi: "rb", "wb", "ab", "r+b", "w+b" e "a+b" La differenza tra "r+b" e "w+b" è solo nell apertura: "r+b" se il file non c è, dà errore, "w+b" anche se il file c è, lo ricrea vuoto Nelle modalità "ab" e "a+b" il file position pointer è pronto per aggiungere dati in fondo al file Il modo "a+b" è simile a "w+b", salvo che permette di scrivere solo in fondo al file; anche se con fseek si può spostare l offset indietro, la scrittura avviene sempre al fondo del file e i dati precedenti non possono essere modificati La chiusura dei file binari si ottiene sempre con la funzione fclose I file binari non sono portabili in quanto i dati possono essere memorizzati in modi diversi su architetture diverse (es. big-endian e low-endian)

Lettura 5 Lettura 6 La lettura di un blocco di byte si ottiene mediante la funzione fread(p, dim_oggetto, num_oggetti, fp); legge dal file fp un numero di oggetti pari a num_oggetti ciascuno di dimensione pari a dim_oggetto byte e li colloca nel vettore di oggetti puntato da p restituisce il numero di oggetti (non di byte) effettivamente letti (può essere inferiore a num_oggetti in caso di errore o fine file) fa avanzare il file position pointer del numero di byte effettivamente letti si devono usare le funzioni feof e ferror per distinguere gli errori dalla fine del file Esempi struct X var1, var2; fread(&var1, sizeof(var1), 1, fp); fread(&var2,sizeof(struct X),1,fp); ogni fread legge un blocco di byte (oggetto, record) della dimensione di una struct X e lo mette nella variabile di cui viene fornito il puntatore (rispettivamente var1 e var2) struct X vet[100]; fread(vet,sizeof(struct X),100,fp); vengono letti 100 record corrispondenti a 100 struct X e memorizzati ordinatamente nel vettore vet Scrittura 7 Scrittura 8 La scrittura di un blocco di byte si ottiene mediante la funzione fwrite(p, dim_oggetto, num_oggetti, fp); scrive nel file fp un numero di oggetti pari a num_oggetti ciascuno di dimensione pari a dim_oggetto byte prelevandoli dal vettore di oggetti puntati da p restituisce il numero di oggetti (non di byte) effettivamente scritti (può essere inferiore a num_oggetti in caso di errore) fa avanzare il file position pointer del numero di byte effettivamente scritti struct X var; fwrite(&var,sizeof(struct X),1,fp); ogni fwrite scrive un blocco di byte (oggetto, record) della dimensione di una struct X prelevandolo dalla variabile var di cui viene fornito il puntatore struct X vet[10]; fwrite(vet,sizeof(struct X),10,fp); vengono scritti 10 record della dimensione di una struct X prelevandoli ordinatamente dal vettore vett

Scrittura 9 Lettura e scrittura di blocchi 10 Attenzione! Per scrivere in due record successivi la stessa var E SBAGLIATO scrivere: fwrite(&var, sizeof var, 2, fp); In questo modo la fwrite scrive sul disco 2*sizeof(var) byte a partire dal primo byte di var, sforando la dimensione di var, trattandolo come se fosse un vettore di 2 elementi Bisogna invece scrivere 2 fwrite: Le funzioni fread e fwrite leggono e scrivono un blocco di byte di dimensione pari a dim_oggetto * num_oggetti Le funzioni ricevono un puntatore e non hanno nessuna informazione sul contenuto di questo blocco che potrebbe essere una variabile o un vettore di qualsiasi tipo: sta al programmatore usare il tipo di oggetto appropriato Solo quando questo blocco di byte viene letto dalla fread e inserito in una variabile o vettore allora il contenuto diventa significativo Lettura e scrittura di blocchi 11 Inizializzazione 12 Blocco di byte letto 01000001 01001111???????? 00001110 char word[5]; Area di allineamento int num; 01000001 01001111???????? 00001110 struct parola { char word[5]; int num; }; La struct dà significato ai byte del blocco CIAO\0 14 In alcuni casi è utile prevedere una inizializzazione del file con strutture vuote, ad esempio per rendere più semplice verificare se un record è già stato scritto struct X vett[max], vuot={"",0}; fp = fopen(file, "wb"); for (i=0; i<max; i++) fwrite(&vuot, sizeof vuot,1,fp); fclose(fp); Come già detto, non si può sostituire al ciclo for una fwrite con num_oggetti pari a MAX

Le funzioni fread e fwrite posizionano automaticamente il file position pointer (offset) all inizio del record successivo Il posizionamento generico si ottiene con la funzione fseek fseek( fp, offset, origine); dove: offset (di tipo long) indica su quale carattere, a partire da origine, spostare il file position pointer origine indica da dove calcolare l offset: SEEK_SET da inizio file SEEK_CURR dalla posizione corrente SEEK_END da fine file 13 Esempio fseek(fp, 20, SEEK_SET); sposta il file position pointer al 21 o carattere del file (il primo ha posizione 0) La fseek può indicare un offset oltre la fine del file, questo allunga il file (i byte non scritti hanno valore indeterminato) Per conoscere la posizione attuale del file position pointer (quindi l offset) si può usare la funzione ftell posiz = ftell(fp) posiz è una variabile di tipo long ftell restituisce -1L in caso di errore 14 Per tornare all inizio del file si può usare la funzione fseek: fseek(fp, 0, SEEK_SET); Ma la soluzione migliore è: rewind(fp); che oltre a eseguire la fseek precedente esegue anche la clearerr(fp) che azzera l indicazione di errori e del raggiungimento della fine del file 15 fgetpos(fp, ptr) memorizza in ptr l offset corrente del file fp, dà un valore non nullo in caso di errore fsetpos(fp, ptr) posiziona l offset corrente del file fp con il valore indicato in ptr, dà un valore non nullo in caso di errore ptr deve essere definito con: fps_t *ptr; il tipo fps_t è un tipo appropriato per contenere il valore di un qualsiasi offset, mentre fseek/ftell possono usare solo valori long (potrebbe essere una limitazione) 16

Troncamento La libreria standard del C non fornisce alcuna funzione in grado di accorciare un file Possono esistere funzioni proprietarie quali truncate, ftruncate e altre Non è altresì possibile mediate funzioni standard eliminare dati dalla testa di un file La soluzione standard per entrambi i casi consiste nel creare un nuovo file copiandovi i dati da tenere ed escludendo quelli da rimuovere 17 Esercizi 1. Si scriva un programma per gestire un agenda elettronica. I dati relativi alle persone sono: nome, cognome, indirizzo, telefono, nota, possono contenere spazi e sono organizzati in una struct persona. Si definisca una dimensione massima per il numero di nominativi. Un file binario ad accesso diretto denominato database.dat contiene i record di tutti i nominativi. (continua) 18 Esercizi (Continuazione) Il programma deve fornire un interfaccia a menu per inserire, cancellare, cercare i dati relativi ad una persona (in base al cognome), visualizzare alfabeticamente tutti i cognomi/nomi senza dettagli. I dati completi siano mantenuti esclusivamente sul file, in memoria si tenga invece un indice alfabetico dei nomi (vettore di strutture contenenti solo cognome, nome e numero del record sul file) per accedere al nominativo. 19