Small Basic: Comment Lire et Ecrire des Fichiers CSV (fr-FR)
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.
'voir http://social.technet.microsoft.com/wiki/contents/articles/30174.small-basic-les-bases-les-tableaux-fr-fr.aspx
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
- Code pour lire du CSV: http://smallbasic.com/program/?ZVF628 (en-US)
- Code pour écrire du Code: http://smallbasic.com/program/?BRP768 (en-US)
- Pour plus d'information lire la RFC 4180: Common Format and MIME Type for Comma-Separated Values (CSV) Files (en-US)
Autres Langues
- Article original: Small Basic: Read and Write CSV Files (en-US)