2 votes

Ocaml CSV vers liste de flottants

Je cherche le moyen le plus simple de transformer un fichier CSV (de flottants) en une liste de flottants. Je ne suis pas très familiarisé avec la lecture de fichiers en général en Ocaml, donc je ne suis pas sûr de ce que ce genre de fonction implique.

Toute aide ou orientation est appréciée :)

EDIT : Je préférerais ne pas utiliser une bibliothèque CSV tierce à moins d'y être absolument obligé.

3voto

Andrej Bauer Points 1274

3voto

Gilles Points 37537

Si vous ne souhaitez pas inclure un bibliothèque tierce et que vos fichiers CSV sont simplement formatés sans guillemets ni virgules intégrées, vous pouvez les analyser facilement à l'aide des fonctions de la bibliothèque standard. Utiliser read_line dans une boucle ou dans une fonction récursive pour lire chaque ligne à tour de rôle. Pour diviser chaque ligne, appelez Str.split_delim (liez votre programme avec str.cma o str.cmxa ). Appeler float_of_string pour analyser chaque colonne en un flotteur.

let comma = Str.regexp ","
let parse_line line = List.map float_of_string (Str.split_delim comma line)

Notez que cela ne fonctionnera pas si vos champs contiennent des guillemets. Il serait facile de supprimer les guillemets au début et à la fin de chaque élément de la liste retournée par split_delim . Cependant, s'il y a des virgules intégrées, vous avez besoin d'un analyseur CSV approprié. Vous pouvez avoir des virgules intégrées si vos données ont été produites par un programme localisé en français - le français utilise les virgules comme séparateur décimal (par exemple, l'anglais 3.14159 , français 3,14159 ). Écrire des données en virgule flottante avec des virgules au lieu de points n'est pas une bonne idée, mais c'est quelque chose que vous pouvez rencontrer (certaines exportations CSV de feuilles de calcul, par exemple). Si vos données proviennent d'un programme Fortran, tout devrait bien se passer.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X