2012-03-09 12 views
6

Próbuję uzyskać pływaki ze sznurka. Mam na myśli czytanie linii po linii z pliku tekstowego i uzyskiwanie pływaków z linii. Znalazłem, jak czytać wiersz po wierszu, ale nie mogłem podzielić ciągu na spływy. Oto przykładowy plik wejściowy:łańcuch ocaml na 4 pływaki

10,10,18,18.1

7,3, 10,14.2

3,3,5.3,5

Sprawdziliśmy sscanf, ale nie mogłem tego zrobić. Dowolny pomysł?

Odpowiedz

8

Od lat doświadczenia, stwierdziłem, że skanowanie jest mało prawdopodobne, aby zrobić dokładnie to, co chcesz. Jest OK dla szybkiego programu testowego.

Jedną z możliwości jest użycie Str.split:

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

Być może trzeba zrobić regexp trochę mocniej, jeśli chcesz, aby wykryć nieprawidłowe dane.

6

Uważnie przeczytaj instrukcję, aby zrozumieć, w jaki sposób działa format Scanf - ma ona pewne dziwactwa, ale istnieje ku temu powód.

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

To rozwiązanie działa dobrze z Scanf.sscanf :-) – cago