1 of 11

FILE CSV

3^ INFORMATICO - IIS PASCAL�DIPARTIMENTO INFORMATICA

2 of 11

ARGOMENTI

  • Definizione file csv
  • Esempi di file csv
  • A cosa servono e dove sono utilizzati
  • Lettura e parsing
  • Esempi ed esercizi risolti

2

3 of 11

CHE COS’È UN FILE CSV?

3

  • CSV è l’acronimo di comma separated values ovvero “valori separati�da una virgola”
  • I file csv sono file di testo con una struttura standard che prevede,�per ogni riga, una serie di stringhe divisi da una virgola
  • Ogni riga rappresenta quindi una serie di valori associati ad un�elemento di interesse
  • La prima riga è solitamente costituita dalle etichette, ovvero le�stringhe che danno il valore semantico alle altre righe

4 of 11

ESEMPIO di file CSV

4

  • Un esempio di file csv per contenere dati di una serie di studenti può essere il seguente

nome,cognome,classe,sezione,matricola�Mario,Giallini,3,M,276781�Luca,Urbani,3,M,237098�Franca,Losi,2,A,182712�Antonella,Franchi,1,B,277265

  • REGOLA:�in un file CSV ben formato tutte le righe hanno lo stesso numero di elementi
  • Le varie stringhe possono essere di dimensione diversa

studenti.csv

5 of 11

PERCHE’ USARE I FILE CSV

5

Esportazione di dati da foglio elettronico

Formato standard per il passaggio di dati fra applicazioni diverse

Permettono di dare una senso semantico ai dati presenti

Permettono di gestire dati di tipi diversi (al netto di casting)

Ottima soluzione per backup e recovery da database.

6 of 11

PARSING DI FILE CSV

6

Il parsing di file csv è una operazione molto standardizzata e consiste di vari passi

  • apertura del file in lettura
  • lettura delle etichette (se presenti) in una stringa
  • ciclo di lettura delle altre righe:
    • per ogni riga
      • leggere ogni stringa fino al separatore , �(ogni stringa = un campo dati)
      • se necessario, casting della stringa al tipo dati opportuno
      • store dei dati letti in apposite struttura dati
  • chiusura del file

7 of 11

ESEMPIO DI CODICE

7

int main() {

ifstream fin("studenti.csv");

// in ogni riga i campi sono delimitati da ,

// leggo la prima riga che contiene solo le etichette

string s;

getline(fin, s);

// leggo tutte le altre righe e le divido

while (!fin.eof()) {

string nome,cognome,classe_s,sezione,matricola;

int classe;

getline(fin, nome, ',');

if (nome == "") { // ho trovato una riga vuota

break;

}

getline(fin, cognome, ',');

getline(fin, classe_s, ','); // questo valore dovrà essere trasformato a intero se necessario

classe = stoi(classe_s); // è necessario il casting perché getline legge SOLO stringhe

getline(fin, sezione, ',');

getline(fin, matricola);

}

fin.close();

return 0;

}

Il codice di parsing del file studenti.csv prima indicato può essere il seguente

C++

8 of 11

ESERCIZIO RISOLTO

8

Sia dato il file CSV sportivi.csv con la struttura seguente.�Scrivi un programma C++ che legge da input il nome N di una nazione, poi legge il file e stampa a video i dati degli sportivi di quella nazione

nome,cognome,sport,eta,nazione

Alice,Rossi,Calcio,25,Italia

Bob,Smith,Basket,28,Stati Uniti

Carla,Martinez,Pallavolo,24,Spagna

David,Lee,Equitazione,30,Regno Unito

Elena,Gonzalez,Calcio,22,Argentina

Federico,Sanchez,Basket,27,Messico

Gina,Wang,Pallavolo,26,Cina

Hugo,Andersson,Equitazione,29,Svezia

Isabella,Müller,Calcio,24,Germania

John,Kim,Basket,31,Corea del Sud

Katarina,Novak,Pallavolo,23,Repubblica Ceca

Luis,Chen,Equitazione,28,Taiwan

Maria,Lopez,Calcio,26,Spagna

sportivi.csv

9 of 11

SOLUZIONE

9

10 of 11

ESERCIZIO PER IL LETTORE

10

Sia dato il file CSV libri.csv con la struttura seguente.�Scrivi un programma C++ che legge il file libri.csv e stampa titolo e prezzo dei libri in ordine di prezzo decrescente.

Nel file possono esserci al massimo 100 libri

titolo,autore,editore,pagine,costo

Il Signore degli Anelli,J.R.R. Tolkien,HarperCollins,1178,25.99

1984,George Orwell,Penguin Books,328,12.99

Cronache di Narnia,C.S. Lewis,HarperCollins,752,20.50

Il Grande Gatsby,F. Scott Fitzgerald,Scribner,180,9.99

Harry Potter e la Pietra Filosofale,J.K. Rowling,Bloomsbury,332,19.95

Il Codice da Vinci,Dan Brown,Random House,593,18.99

Orgoglio e Pregiudizio,Jane Austen,Penguin Classics,432,14.75

La Ragazza di Fuoco,Suzanne Collins,Scholastic,391,16.49

Il Nome del Vento,Patrick Rothfuss,DAW Books,662,22.00

Il Vecchio e il Mare,Ernest Hemingway,Scribner,127,8.99

La Città delle Bestie,Isabel Allende,HarperCollins,346,15.25

La Storia Infinita,Michael Ende,Doubleday,396,13.99

Cime Tempestose,Emily Brontë,Penguin Classics,416,12.50

La Ragazza che Giocava con il Fuoco,Stieg Larsson,Vintage Books,503,14.95

libri.csv

11 of 11

ESERCIZIO RISOLTO

11

Sia dato il file olympiad.csv

Scrivi un programma con menu testuale per le seguenti operazioni:

  1. lettura e caricamento dei dati dal file csv fornito (punti 1)
  2. visualizzare dei dati ordinati in ordine alfabetico (punti 2)
  3. mostrare il totale delle medaglie per nazione (punti 3)
  4. visualizzare le nazioni che hanno ottenuto almeno 5 medaglie d’oro (punti 2)
  5. visualizzazione del giorno con il maggior numero di medaglie assegnate (punti 3)
  6. visualizzare l’età media delle atlete vincitrici di medaglie d’oro (punti 2)
  7. inserimento di nuove righe con un formato compatibile con quello presente nel file (punti)�(l’applicazione deve chiedere i dati all’utente e poi salvare nel medesimo file)
  8. salvataggio del file con le nuove informazioni (punti 2)