Programmazione e Laboratorio di Programmazione

Slides:



Advertisements
Presentazioni simili
File Linguaggio C.
Advertisements

INFORMATICA Altre Istruzioni di I/O
Fondamenti di Informatica CDL in Ingegneria Gestionale - A.A Gestione dei file Ing. Simona Colucci.
Operazioni di I/O da console e da file in C standard
Anno accademico Input e Output in C. Anno accademico Sommario Input e outputInput e output I flussi di I/O I flussi di I/O Luso.
La ricorsione Simulazione. Il Main /* Programma che usa una funzione ricorsiva*/ #include #define MAX_N 8 main() int valore, dato; printf(Introduci n:
INFORMATICA I file.
Argomenti dalla linea dei comandi Gli argomenti possono essere passati a qualsiasi funzione di un programma, compresa la main(), direttamente dalla linea.
FILE DATI 16 lunedi 26 luglio giovedi ore 9 Come sappiamo, un file dati è un gruppo di informazioni tra loro correlate, memorizzate in un dispositivo di.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE File Marco D. Santambrogio – Ver. aggiornata al 15 Maggio 2013.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE File Marco D. Santambrogio – Ver. aggiornata al 9 Maggio 2012.
Laboratorio di Linguaggi lezione VI Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea in.
Laboratorio di Linguaggi lezione XI: I/O Marco Tarini Università dellInsubria Facoltà di Scienze Matematiche, Fisiche e Naturali di Varese Corso di Laurea.
1 Esercitazione sui segnali Problema: creare un programma analizzatore di file testuali che prenda come argomenti il nome di un file e una sequenza di.
INFORMATICA I file. © Piero Demichelis 2 File Per rendere più uniforme possibile il comportamento dei programmi in relazione alla grande varietà dei dispositivi.
Esercizi di riepilogo sul linguaggio C: file, puntatori, liste
1 Gestione dei File Corso di Informatica A Vito Perrone.
File di testo, file binari
I File.
GESTIONE DEI FILE Per poter mantenere disponibili i dati tra le diverse esecuzioni di un programma (persi-stenza dei dati) è necessario poterli archi-viare.
void binario(int n); …………………
Creazione progetto in C++/DEV
1 Gestione dei File. 2 Perché i file? Sono strutture dati persistenti Sono solitamente memorizzati sui dischi –Si usano dall'interno dei programmi Realizzano.
Esercizi su File.
Gestione dei file di testo, matrici e struct
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE File Marco D. Santambrogio – Ver. aggiornata al 21 Maggio 2014.
Fabio Scotti – Università degli Studi – Laboratorio di programmazione per la sicurezza 1 Lezione 13 e 14 GESTIONE DEI FILE A) Nozioni sulla gestione dei.
1 Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza Valentina Ciriani ( ) Laboratorio di programmazione Lezione 13 e 14 -
Operatori di incremento e decremento
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Capitolo 14 Diapositiva 1 Linguaggio C – Guida alla programmazione 2/ed – A. Bellini, A. Guidi Copyright © The McGraw-Hill Companies srl Archiviare.
11. Gestione dei file Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A
11. Gestione dei file Ing. Simona Colucci Informatica - CDL in Ingegneria Industriale- A.A
Files in C++ Motivazioni Un programma in esecuzione legge (sequenzialmente) una sequenza di caratteri prodotti "al volo" dall'utente (tramite tastiera)
Lezione n. Parole chiave: Corso di Laurea: Insegnamento: Docente: A.A Salvatore Cuomo Approfondimenti di C, Stringhe e file 13 Stringhe.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE File Marco D. Santambrogio – Ver. aggiornata al 6 Marzo 2016.
1 ELEMENTI DI INFORMATICA Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettronica Linguaggio C A.A. 2011/2012
IL SOFTWARE (FPwin 6.0).
© 2007 SEI-Società Editrice Internazionale, Apogeo
Introduzione al linguaggio C
7. Strutture di controllo Ing. Simona Colucci
10. Programmazione Ricorsiva Ing. Simona Colucci
I FILES AD ACCESSO SEQUENZIALE
Ambienti di Programmazione per il Software di Base
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Sviluppo di un programma
Programmazione e Laboratorio di Programmazione
APPUNTI SUL LINGUAGGIO C Memoria secondaria: File
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Fondamenti di Informatica
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
comprensione e modifica di codice
APPUNTI SUL LINGUAGGIO C Simulazione Prima Prova Intermedia
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Programmazione e Laboratorio di Programmazione
Transcript della presentazione:

Programmazione e Laboratorio di Programmazione Lezione XII.III Gestione dei file Un progetto completo Programmazione e Laboratorio di Programmazione: Gestione dei file – Un progetto completo

mycp Sviluppare in linguaggio “C”: un programma che copi un file in un altro Cosa farà il nostro programma nelle varie iterazioni? MP1: lettura di un file in formato noto MP2: file di uscita e uso della redirezione MP3: parametri su linea di comando MP4: lettura di un file di formato sconosciuto MP5: gestione degli errori MP6: scrittura canonica del file di uscita Programmazione e Laboratorio di Programmazione: Gestione dei file – Un progetto completo

MP1 (lettura file formato noto) Creare un file chiamato FileNoto.dat (utilizzando un text editor) contenente le seguenti righe: Mario Rossi 22 Giulia Bianchi 30 Marco Verdi 27 Creare un file sorgente “C” chiamato mycp1.c E’ possibile fare a meno di un text-editor? Programmazione e Laboratorio di Programmazione: Gestione dei file – Un progetto completo

MP1(2) #include <stdio.h> main() { FILE *FileIn; char FileInName [80]; char var1 [80], var2 [80]; int var3; printf ("Nome del file sorgente ?"); scanf ("%s", FileInName); Programmazione e Laboratorio di Programmazione: Gestione dei file – Un progetto completo

MP1(3) FileIn = fopen (FileInName, "r"); fscanf (FileIn, "%s %s %d", var1, var2, &var3); printf ("%s %s %d\n", var1, var2, var3); } Programmazione e Laboratorio di Programmazione: Gestione dei file – Un progetto completo

MP1(3) A che serve modificare la linea: printf ("Nome del file sorgente ?\n"); in quest’altra?: printf ("Nome del file sorgente : "); All’interno del file FileNoto.dat cancellate la votazione di Giulia Bianchi e rilanciate il programma; cosa succede? Programmazione e Laboratorio di Programmazione: Gestione dei file – Un progetto completo

MP2 (uso redirezione) Il programma mycp nella sua prima versione legge dati da un file e li presenta sullo schermo Esiste un modo molto semplice per inserire i dati che vengono mostrati sullo schermo all’interno di un nuovo file … ricordate il meccanismo della redirezione? Programmazione e Laboratorio di Programmazione: Gestione dei file – Un progetto completo

./mycp1 > FileNotoCopia.dat MP2 (2) Provate il comando seguente: ./mycp1 > FileNotoCopia.dat Cosa succede??? La richiesta del nome del file è presentata sul canale stdout che è lo stesso canale al quale vengono inviati i dati letti dal file … Programmazione e Laboratorio di Programmazione: Gestione dei file – Un progetto completo

MP3 (uso linea comando) Un modo per uscire dall’impasse puo’ essere quello di evitare di inviare richieste di inserimento dati alla console e utilizzare i parametri a linea di comando A questo scopo studiamo il seguente codice “C”: #include <stdio.h> main (int argc, char *argv []) { int i; for (i=0; i<argc; i++) { printf ("<Arg %d: %s>\n", i, argv [i]); } Programmazione e Laboratorio di Programmazione: Gestione dei file – Un progetto completo

MP3 (2) #include <stdio.h> main (int argc, char *argv []) { FILE *FileIn; char var1 [80], var2 [80]; int var3; FileIn = fopen (argv [1], "r"); fscanf (FileIn, "%s %s %d", var1, var2, &var3); printf ("%s %s %d\n", var1, var2, var3); . . . . . Programmazione e Laboratorio di Programmazione: Gestione dei file – Un progetto completo

MP3 (3) Le cose ora sembrano funzionare ma … Controllate la lunghezza dei files origine e destinazione La soluzione proposta come si comporta se il formato del file viene cambiato? Che succede se il programma lavora su files binari? Programmazione e Laboratorio di Programmazione: Gestione dei file – Un progetto completo

MP4 (formato sconosciuto) #include <stdio.h> main (int argc, char *argv []) { FILE *FileIn; unsigned char ch; FileIn = fopen (argv [1], "rb"); for (;;) { ch = fgetc (FileIn); if (ch == EOF) break; printf ("%c", ch); } … funziona sempre? Programmazione e Laboratorio di Programmazione: Gestione dei file – Un progetto completo

MP4 (2) #include <stdio.h> main (int argc, char *argv []) { FILE *FileIn; unsigned char ch; FileIn = fopen (argv [1], ”rb"); for (;;) { ch = fgetc (FileIn); if (ch > 127) break; printf ("%c", ch); } … e se ci sono errori? Programmazione e Laboratorio di Programmazione: Gestione dei file – Un progetto completo

MP4 (3) #include <stdio.h> main (int argc, char *argv []) { FILE *FileIn; unsigned char ch; FileIn = fopen (argv [1], ”rb"); for (;;) { ch = fgetc (FileIn); if (feof (FileIn)) break; printf ("%c", ch); } … quanto ci soddisfa? Programmazione e Laboratorio di Programmazione: Gestione dei file – Un progetto completo

MP4 (4) Quella che segue è una versione piu’ corretta e pulita. Per quali motivi? ch = fgetc (FileIn); while (! feof (FileIn)) { fputc (ch, FileOut); Nby++; } A cosa serve la prima fgetc? Programmazione e Laboratorio di Programmazione: Gestione dei file – Un progetto completo

MP4 (… imprevisto …) In ambiente Windows è NECESSARIO obbligare la console ad utilizzare il formato binario https://msdn.microsoft.com/en-us/library/aa298581(v=vs.60).aspx #include <stdio.h> #include <fcntl.h> #include <io.h> … /* Set console to binary behavior */ setmode(fileno(stdin), _O_BINARY); setmode(fileno(stdout), _O_BINARY); Programmazione e Laboratorio di Programmazione: Gestione dei file – Un progetto completo

MP5 (gestione errori) Che succede a mycp se viene dato come nome del file di ingresso quello di un file che non esiste? Che succede a mycp se il file di ingresso appartiene ad un altro utente o è protetto? Come vengono gestite eventuali anomalie di funzionamento? Programmazione e Laboratorio di Programmazione: Gestione dei file – Un progetto completo

MP5 (2) Apertura del file di ingresso: FileIn = fopen (FileInName, "rb"); if (FileIn == NULL) { printf ("Impossibile aprire il file %s\n", FileInName); return (1); } Non è ancora del tutto corretto … cosa non va? Programmazione e Laboratorio di Programmazione: Gestione dei file – Un progetto completo

MP5 (2) FileIn = fopen (FileInName, "rb"); if (FileIn == NULL) { fprintf (stderr, "Impossibile aprire il file %s\n", FileInName); return (1); } Programmazione e Laboratorio di Programmazione: Gestione dei file – Un progetto completo

MP6 (scrittura file corretta) L’ultimo passo consiste nell’inserire nel codice sorgente le istruzioni che ci permetteranno di scrivere il file di uscita facendo a meno della redirezione Inserire l’apertura del file di uscita utilizzando il secondo parametro su linea di comando Verificare la corretta scrittura dei singoli caratteri in uscita Abbiamo aperto i files ma dobbiamo anche chiuderli!!! Programmazione e Laboratorio di Programmazione: Gestione dei file – Un progetto completo

MP6 (2) #include <stdio.h> int main (int argc, char *argv []) { FILE *FileIn, *FileOut; unsigned char ch; long int Nby = 0; int status; Programmazione e Laboratorio di Programmazione: Gestione dei file – Un progetto completo

MP6 (3) FileIn = fopen (argv [1], "rb"); if (FileIn == NULL) { fprintf (stderr, "Impossibile aprire il file %s\n", argv [1]); return (1); } FileOut = fopen (argv [2], "wb"); if (FileOut == NULL) { fprintf (stderr, "Impossibile aprire il file %s\n", argv [2]); return (2); Programmazione e Laboratorio di Programmazione: Gestione dei file – Un progetto completo

MP6 (4) ch = fgetc (FileIn); while (! feof (FileIn)) { status = fputc (ch, FileOut); if (status != ch) { fprintf (stderr, "Errore scrivendo il file %s\n", argv [2]); return (3); } Nby++; Programmazione e Laboratorio di Programmazione: Gestione dei file – Un progetto completo

MP6 (4) fprintf (stderr, "Copiati %ld bytes\n", Nby); fclose (FileIn); fclose (FileOut); return (0); } … Ci siamo quasi! Ora non resta che fare il controllo di correttezza dei parametri sulla linea di comando e verificare che la funzione fgetc funzioni correttamente … Programmazione e Laboratorio di Programmazione: Gestione dei file – Un progetto completo