2012-03-09 8 views
6

Sto provando a ottenere i float da una stringa. Voglio dire leggere riga per riga da un file di testo e ottenere i float da una linea. Ho trovato come leggere riga per riga, ma non ho potuto dividere la stringa in float. Ecco un esempio di file di input:stringa ocaml a 4 galleggianti

10,10,18,18.1

7,3, 10,14.2

3,3,5.3,5

Ho guardato sscanf ma non potevo farlo. Qualche idea?

risposta

8

Da anni di esperienza, ho trovato che scanf è improbabile che faccia esattamente quello che vuoi. Va bene per un programma di test rapido.

Una possibilità è quella di utilizzare Str.split:

let floats_of_string s = 
    List.map float_of_string (Str.split (Str.regexp "[, \t]+") s) 

Potrebbe essere necessario effettuare l'espressione regolare un po 'più stretto, se si desidera rilevare input non valido.

6

Leggere attentamente il manuale per capire come funziona il formato scanf: presenta alcune stranezze ma c'è un motivo dietro di esse.

"%f , %f , %f , %f %!" 
+1

Questa soluzione funziona perfettamente con Scanf.sscanf :-) – cago