2012-03-09 1 views
6

문자열에서 부동 문자를 가져 오려고합니다. 텍스트 파일에서 한 줄씩 읽는 것과 행에서 수레를 가져 오는 것을 의미합니다. 줄 단위로 읽는 방법을 찾았지만 문자열을 수레로 나눌 수 없었습니다. 내가 검토 한 10,14.2ocaml 문자열에서 4 개의 부동 문자

3,3,5.3,5

10,10,18,18.1

7,3 : 여기에 예제 입력 파일입니다 sscanf하지만 나는 그것을 할 수 없었다. 어떤 생각?

답변

8

오랜 경험을 통해 나는 scanf가 원하는 것을 정확하게 수행 할 수 없다는 것을 발견했습니다. 빠른 테스트 프로그램은 괜찮습니다.

하나의 가능성은 Str.split을 사용하는 것입니다

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

당신이 잘못된 입력을 감지 할 경우 조금 더 단단한 정규 표현식을해야 할 수도 있습니다.

6

scanf 형식의 작동 방식을 이해하기 위해 매뉴얼을주의 깊게 읽으십시오 - 몇 가지 단점이 있지만 그 뒤에는 이유가 있습니다.

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

이 솔루션은 Scanf.sscanf :-)와 잘 작동합니다. – cago