Concetti Chiave
- Develop a library to read CSV files, assuming lines are separated by '\n' and fields by commas, with a maximum of 1024 characters per line.
- The library should include functions: cvsgetline() to read and split lines into fields, cvsfield() to return the nth field, and cvsnfields() to return the number of fields.
- Create a program that converts a CSV file to an HTML file, maintaining the same name but with an .html extension.
- The generated HTML file should contain a table with a row for each CSV line and a column for each field within the line.
- Use the strtok() library function to assist in reading and splitting the CSV file into fields.
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 ,.
seguente costituisce un esempio di tale formato:
qui va tutto, molto, bene
ciao, 13, mondo!
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.
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 la lettura del file CSV e la suddivisione in campi potete usare la funzione di libreria strtok().
Domande da interrogazione
- Qual è lo scopo principale del programma descritto nel testo?
- Quali funzioni deve includere la libreria per la lettura del file CSV?
- Come deve essere strutturato il file HTML generato dal programma?
Il programma è progettato per trasformare un file CSV in un file HTML, generando una tabella HTML che rappresenta i dati del CSV.
La libreria deve includere tre funzioni: `cvsgetline` per leggere una linea del file, `cvsfield` per ottenere un campo specifico della linea letta, e `cvsnfields` per restituire il numero di campi della linea.
Il file HTML deve contenere una tabella con una riga per ogni linea del file CSV e una colonna per ogni campo della linea, utilizzando gli elementi HTML `TABLE`, `TR`, e `TD`.