Concetti Chiave
- La libreria per la lettura di file CSV deve includere tre funzioni: cvsgetline, cvsfield e cvsnfields.
- cvsgetline legge la prossima linea del file CSV e la suddivide in campi, restituendo un puntatore alla linea letta.
- cvsfield restituisce un puntatore alla stringa corrispondente all’n-esimo campo dell'ultima linea letta.
- cvsnfields restituisce il numero totale di campi presenti nell'ultima linea letta dal file CSV.
- Il programma genera un file HTML contenente una tabella, con righe e colonne corrispondenti ai dati del file CSV.
Per prima cosa, dovete scrivere una libreria (collezione di funzioni, racchiuse in un unico file sorgente) per la
lettura di un file in formato CSV. Per semplicità, potete assumere che un file in tale formato sia dato da una
sequenza di linee separate dal carattere \n contenenti ciascuna dei “campi” separati dal carattere , (virgola); il
numero massimo di caratteri per linea è 1024 e nei campi non compare mai il carattere ,. Il file esempio.csv
seguente costituisce un esempio di tale formato:
qui va tutto, molto, bene
ciao, 13, mondo!
Funzioni della libreria
La libreria deve comprendere le tre funzioni:
1. char *cvsgetline( FILE *in ), che legga la prossima linea del file corrispondente a in e la suddivida nei
campi che la compongono (restituendo un puntatore alla linea appena letta);
2. la funzione char *cvsfield( int n ), che restituisca un puntatore alla stringa corrispondente all’n-esimo campo
dell’ultima linea letta (i campi sono numerati da 0);
3. la funzione int cvsnfields( void ), che restituisca il numero complessivo di campi dell’ultima linea letta.
Esempio di utilizzo
Ad esempio, se invocata sul file precedente, dopo la seconda chiamata di cvsgetline, la chiamata cvsfiled( 2 )
deve restituire un puntatore alla stringa mondo!.
Utilizzando la libreria appena realizzata, scrivete un programma che, dato come parametro sulla linea di
comando il nome di un file in fomato CSV, a meno dell’estensione .csv, generi un file in formato HTML, con
lo stesso nome e estensione .html, contenente una tabella (elemento TABLE) avente una riga (elemento TR) per
ogni linea del file CSV e, su ogni riga, una colonna (elemento TD) per ogni campo della linea.
Ad esempio, se invocato con argomento esempio, il programma leggerà il file esempio.csv qui sopra descritto e
scriverà il file esempio.html con il seguente contenuto:
| qui va tutto | molto | bene |
| ciao | 13 | mondo! |
Suggerimento per l'implementazione
Suggerimento. Per la lettura del file CSV e la suddivisione in campi potete usare la funzione di libreria strtok().
Domande da interrogazione
- Qual è lo scopo principale della libreria descritta nel testo?
- Quali sono le funzioni principali che la libreria deve includere?
- Come deve essere strutturato il file HTML generato dal programma?
La libreria è progettata per leggere file in formato CSV, suddividere le linee in campi e fornire accesso a questi campi tramite funzioni specifiche.
La libreria deve includere tre funzioni principali: `cvsgetline` per leggere e suddividere la prossima linea del file, `cvsfield` per restituire un puntatore al campo specificato dell'ultima linea letta, e `cvsnfields` per restituire il numero di campi dell'ultima linea letta.
Il file HTML generato deve contenere una tabella con una riga per ogni linea del file CSV e una colonna per ogni campo della linea, mantenendo lo stesso nome del file CSV ma con estensione .html.