2012-03-09 25 views
6

Tôi đang cố lấy các phao từ một chuỗi. Tôi có nghĩa là đọc từng dòng một từ một tập tin văn bản và nhận được phao từ một dòng. Tôi tìm thấy cách đọc từng dòng nhưng tôi không thể chia chuỗi thành phao. Dưới đây là một ví dụ tập tin đầu vào:chuỗi ocaml đến 4 phao

10,10,18,18.1

7,3, 10,14.2

3,3,5.3,5

tôi đã xem xét sscanf nhưng tôi không thể làm được. Bất kỳ ý tưởng?

Trả lời

8

Từ nhiều năm kinh nghiệm, tôi thấy rằng scanf không thể thực hiện chính xác những gì bạn muốn. Đó là OK cho một chương trình thử nghiệm nhanh chóng.

Một khả năng là sử dụng Str.split:

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

Bạn có thể cần phải thực hiện chặt chẽ hơn regexp một chút nếu bạn muốn dò tìm đầu vào không hợp lệ.

6

Đọc kỹ hướng dẫn sử dụng để hiểu cách thức hoạt động của định dạng scanf - nó có một số điều kỳ quặc nhưng có lý do đằng sau chúng.

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

Giải pháp này hoạt động tốt với Scanf.sscanf :-) – cago