2012-03-09 19 views
6

Estoy tratando de obtener los flotadores de una cadena. Me refiero a leer línea por línea desde un archivo de texto y obtener los flotadores de una línea. Encontré cómo leer línea por línea pero no pude dividir la cuerda en flotadores. Aquí está un ejemplo de archivo de entrada:cadena ocaml a 4 flotadores

10,10,18,18.1

7,3, 10,14.2

3,3,5.3,5

He mirado sscanf pero no pude hacerlo. ¿Alguna idea?

Respuesta

8

Por años de experiencia, he descubierto que es poco probable que scanf haga exactamente lo que usted desea. Está bien para un programa de prueba rápido.

Una posibilidad es utilizar Str.split:

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

Es posible que tenga que hacer con la expresión regular un poco más fuerte si se quiere detectar una entrada no válida.

6

Lea el manual atentamente para comprender cómo funciona el formato de escaneo: tiene algunos caprichos, pero hay una razón detrás de ellos.

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

Esta solución funciona bien con Scanf.sscanf :-) – cago