Modulo 1: tokenizzazione di una email
Per porre domande usate la pagina
DomandeSulModuloUno.
Lo scopo del modulo è leggere una email da un file e tokenizzarla.
Si debbono scrivere due file:
- modulo1.c: contenente le funzioni i cui prototipi sono in modulo1.h
- testModulo1.c: contenente le funzioni di test che controllano le funzioni in modulo1.c
Consegna: Questi due file dovranno essere consegnati entro il
6-apr-2005 in una opportuna
pagina di consegna
.
In attachment a questa pagina allego:
- una stringa vuota è un puntatore ad un buffer che inizia con il carattere '\0'
- i buffer debbono contenere anche il carattere '\0' finale per cui al massimo ci potete mettere dim-1 caratteri
- una parola è composta da almeno 2 caratteri
- il parametro email della funzione tokenizzaEmail è il contenuto della email letta dal file
- ATTENZIONE: chi usa variabili globali LO BOCCIO
- La memoria usata dalle funzioni deve essere allocata e deallocata dalle funzioni di test
- scegliete una dimensione adeguata (visto che conoscete la lunghezza della email)
- oppure riallocate la memoria quando ricevete BUFFER_TOO_SMALL
- Le funzioni verificano gli argomenti:
- un argomento per volta dal primo all'ultimo
- per ciascun argomento: nell'ordine suggerito dai possibili codici di errore (vedi modulo1.h )
- Gestione degli errori:
- Se una funzione produce un errore il contenuto dei buffer è indefinito
- Se una funzione riceve un codice di errore lo ritorna e esce immediatamente
- Nei test
- potete assumere che il file email1.txt esista e sia nella directory corrente
- altrimenti create un file di contenuto e nome noto per i test su leggiFile
- Potete usare funzioni di libreria (includendo i .h opportuni)
- Però fatemi sapere a lezione quali librerie devo linkare oltre a libm e libc
- tokenizzaEmail
- Le stringhe puntate dai Tokens vengono allocate da tokenizzaEmail
- ATTENZIONE: usate una stringa allocata nuova per ogni parola o contesto inserita nei campi del token, altrimenti diventa un problema grosso deallocare il vettore di tokens.
- ATTENZIONE: non c'e' modo di comunicare quanti tokens sono stati inseriti nel vettore
- COME FARE: inizializzate il token che segue l'ultimo inserito a {NULL, NULL}
- COME SI USA: nella stampa dei token ci si ferma non appena si trova un Token == {NULL, NULL}
- Come compilare main.c assieme a modulo1.c (con debug attivato)
- gcc -g -o modulo1 main.c modulo1.c
- primaParola fornisce solo la lunghezza della parola ma non della monnezza che la precede ... come trovo la seconda parola?
- scavalca la monnezza
- per vedere se il file esiste potete usare la funzione int stat(const char * file_name, struct stat * buf)
- accapi in fondo al blocco degli headers?
- Per evitare di dover gestire l'ultimo header in modo diverso dagli altri fate in modo che il blocco degli headers finisca con un singolo '\n' e poi lo '\0'
- caratteri accentati: vanno considerati come SEPARATORI. Gli unici caratteri che ci interessano sono A-Z, a-z e 0-9.
- ATTENZIONE: associate i test su RESULT_OK al SOLO argomento 0 (zero). E' inutile ricopiarli per ogni argomento.
- per gli altri argomenti io metto NOT_IMPLEMENTED per cui quello che fate lo ignorerò
- NOTA: Per semplificarvi la vita assumete che esistano 3 nomi di file standard:
- file-empty che non contiene nulla
- file-unreadable di cui non avete diritti di scrittura
- file-missing che non è presente
--
AndreaSterbini - 20 Mar 2005