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:


NOTE (prese dalle DomandeSulModuloUno)

  • 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 smile
  • 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 wink
  • 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

Topic attachments
I Attachment History Action Size Date Who Comment
Texttxt email1.txt r1 manage 0.3 K 2005-03-20 - 15:40 AndreaSterbini Esempio di email
Header fileh modulo1.h r2 r1 manage 2.9 K 2005-03-21 - 11:33 AndreaSterbini Prototipi delle funzioni, codici di errore, struct
PDFpdf modulo1.pdf r1 manage 126.6 K 2005-03-20 - 15:31 AndreaSterbini Descrizione del modulo 1
Header fileh testModulo1.h r1 manage 1.9 K 2005-03-20 - 15:40 AndreaSterbini Prototipi delle funzioni di test

This topic: Labprog2eo > WebHome > DomandeSulModuloUno > ModuloUno
Topic revision: r15 - 2005-04-03 - AndreaSterbini
 
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2024 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback