ocaml струна до 4-х поплавков - PullRequest
6 голосов
/ 09 марта 2012

Я пытаюсь получить поплавки из строки.Я имею в виду чтение построчно из текстового файла и получение поплавков из строки.Я нашел, как читать построчно, но не смог разбить строку на числа с плавающей точкой.Вот пример входного файла:

10,10,18,18.1

7,3, 10,14.2

3,3,5.3,5

Я посмотрел на sscanf, но не смог этого сделать.Есть идеи?

Ответы [ 2 ]

8 голосов
/ 09 марта 2012

Из многолетнего опыта я обнаружил, что scanf вряд ли будет делать именно то, что вы хотите.Это нормально для программы быстрого тестирования.

Одна из возможностей - использовать Str.split:

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

Возможно, вам придется сделать регулярное выражение немного более жестким, если вы хотите обнаружить неверный ввод.

6 голосов
/ 09 марта 2012

Внимательно прочитайте руководство, чтобы понять, как работает формат scanf - у него есть некоторые причуды, но за ними есть причина.

"%f , %f , %f , %f %!"
...