Qu'est-ce que le CSV?

CSV, signifiant "Comma Separated Values" soit "Valeurs Séparées par des Virgules", est un format de fichier qui est utilisé pour échanger des données entre programmes. Il utilise des virgules pour séparer des valeurs et contient plusieurs valeurs sur chaque ligne.

Exemple

Pour un jeu nous voulons sauvegardes les meilleurs scores du joueur, son nom et la date quand il a obtenu son score.
Le format choisirons par conséquent est: [nom du joueur], [score], [date]

Bob,12,2013-01-02

Cela signifie que bob à obtenu 12 points le 2013-01-02. Nous pouvons facilement stocker plusieurs scores en les écrivant chacun les uns après les autres.

Alice,15,2013-03-04
Bob,12,2013-01-02
Charlie,9,2013-05-06

Observation:  les fichiers CSV peuvent supporter un à plusieurs enregistrements (ou lignes) avec des valeurs.

Exemple

Nous avons un thermomètre qui enregistre la température mesurée dans un fichier. La première valeur d'une ligne décrit l'heure, la seconde les minutes et la troisième la température. Le format est : [heure], [minute], [température]

7,38,12
7,39,12
7,40,13
7,41,13
7,42,13

Par exemple la première ligne signifie qu'à 7:38 une température de 12 à été mesurée.

Observation: Il peut être difficile de comprendre un fichier CSV si nous ne savons pas ce que contient chaque valeur - quel est sont format.

Implémentation

Lire un CSV

Pour charger un fichier CSV, une boucle while va lire ligne après ligne. Dans la boucle la sous-routine ExtractValues() est appelée pour extraire toutes les valeurs depuis la ligne. Après que la boucle est terminée, toutes les valeurs sont affichées dans TextWindow par  ShowValues().

filename = "data.csv"
line_number = 1
 
'-----------------------------------------------------------------------------
'   lit ligne par ligne, enregistre les valeurs et les affiche
'-----------------------------------------------------------------------------
line = File.ReadLine(filename, line_number)
 
While line <> ""
  ExtractValues()
   
  line_number = line_number + 1
  line = File.ReadLine(filename, line_number)
EndWhile
 
ShowValues()
 
 
 
'-----------------------------------------------------------------------------
'   ShowValues - affiche toutes les valeurs du csv dans TextWindow
'-----------------------------------------------------------------------------
Sub ShowValues
  For line_number = 1 to Array.GetItemCount(csv)   
    For value_number = 1 to Array.GetItemCount(csv[line_number])
      TextWindow.Write(csv[line_number][value_number] + " ")
    EndFor
    TextWindow.WriteLine("")
  EndFor
EndSub

La sous-routine ExtractValues() traite la ligne en cours. Elle extrait toutes les valeurs et les enregistre dans le tableau csv à la position correspondante.

'-----------------------------------------------------------------------------
'   ExtractValues - enregistre toutes les valeurs de la ligne en cours dans csv
'-----------------------------------------------------------------------------
Sub ExtractValues 
  'répète tant qu'on a une virgule
  While Text.GetIndexOf(line,",") > 0
    comma_position = Text.GetIndexOf(line, ",")   
     
    'enregistre le texte jusqu'à la première virgule
    values[Array.GetItemCount(values)+1] = Text.GetSubText(line, 1, comma_position-1)
     
    'supprime le texte enregistré et la virgule de la ligne
    line = Text.GetSubTextToEnd(line, comma_position+1)
  EndWhile
   
  'la dernière valeur n'a pas de virgule à la fin
  values[Array.GetItemCount(values)+1] = line
   
  'ajoute les valeurs lues dans csv
  csv[Array.GetItemCount(csv)+1] = values  
   
  'réinitialisation de variable
  values = ""
EndSub

Pour finir toutes les valeurs du fichier CSV sont accessibles depuis le tableau CSV. Par exemple, vous pouvez obtenir la troisièmes valeurs de la seconde ligne avec: csv[2][3]

Ecriture un CSV

Pour enregistrer un tableau comme fichier CSV, il doit être traité ligne par ligne. Toutes les valeurs d'une ligne sont combinée en un seul texte de lequel des virgules sont insérées entre les valeurs. Ce texte est alors écrit dans le fichier CSV.

csv = "1=1\=1\;2\=2\;3\=3\;;2=1\=4\;2\=5\;3\=6\;;3=1\=7\;2\=8\;3\=9\;;"
csv_filename = "data.csv"
 
For line_number = 1 to Array.GetItemCount(csv)
  line = csv[line_number][1]
   
  For field_nr = 2 to Array.GetItemCount(csv[line_number])
    line = line +  "," + csv[line_number][field_nr]
  EndFor
   
  ' écrit la ligne dans le fichier
  File.AppendContents(csv_filename, line)
EndFor


Références

Autres Langues