Comment lire un fichier .txt ou .csv ligne par ligne pour en extraire des données numériques?

Par Damien MUTI

Description

Dans le programme suivant, nous allons montrer comment extraire des données d'un fichier .txt ou .cvs pour les utiliser dans un sketch.

Présentation du problème: Lecture de données numérique

Considérons un certain nombre de points M(x,y,z) dans l'espace modélisés par le type PVector sous Processing.

Plutôt que de définir tous ces points dans le corps du programme, il est plus élégant de placer les coordonnées de chaque points dans un fichier nommé points.txt ou points.cvs, puis de lire récursivement les coordonnées de chaque points à l'aide de méthodes bien choisies:

loadStrings() : Lien externe

loadTable() : Lien externe

createReader() associé à la classe BufferedReader : Lien externe

(voir les références de Processing)

Création du fichier .txt ou .csv contenant les données

sous un tableur (Excel ou libreOffice) :

1) Entrer les valeur des coordonnées en 3 colonnes (pour x, y et z):

2) Enregistrer le fichier en “.csv”. On donne par exemple le nom “points.csv” au fichier précédant. On obtient le fichier suivant:

-700;200;2800;
-600;200;2800;
-500;200;2800;
-400;200;2800;
-300;200;2800;
-200;200;2800;
-600;0;2800;
-500;0;2800;
-400;0;2800;
-300;0;2800;
-200;0;2800;
-100;0;2800;

3) Enregistrer le fichier points.csv dans le dossier “Data” de votre sketch Processing.

Sketch Processing permettant la lecture des données

Dans l'IDE de Processing taper le programme suivant:

String[] contenu_file; // tableau contanent les différentes ligne du fichier à lire
PVector[] hotPoints; // tableau de PVector contenant les coordonnées des points en 3D nommés "hotPoints"
void setup() {
// lecture de toutes les lignes du fichier et enregistrement des ces lignes dans le tableau "contenu_file"
contenu_file = loadStrings("Vecteurs_Hot_Points.csv");
// création du tableu de PVector de la même taille que le tableau "contenu_file" contenant les données à traiter
hotPoints = new PVector[contenu_file.length];
// pour tous les éléments du tableau, faire...
for (int i=0;i<contenu_file.length;i++){
// séparer toutres les données contennues dans une ligne. Le séparateur est ici le point virgule.
String[] pieces = split(contenu_file[i], ";");
// remplir le tableau "hotPoint" avec un nouveau PVector dont les coordonnées sont contenus dans le tableau "pieces"
hotPoints[i] = new PVector(float(pieces[0]), float(pieces[1]), float(pieces[2]) );
println(hotPoints[i]);
}
}
void draw() {
}

ATTENTION: Lorsque vous enregistrez le fichier .cvs, il convient de bien vérifier la nature du séparateur. Ici, le séparateur dans le fichier “Vecteurs_Hot_Points.csv” est un point virgule. Par conséquent le séparateur “;” doit être passé en deuxième paramètre de la méthode “split()”.

Vous n'avez plus qu'à utiliser le tableau de PVector “hotPoints” dans la boucle draw() comme bon vous semble !!