2013-03-10 2 views
2

나는 거의 완전한 OCaml 초보자이지만 함수 프로그래밍 지식이 있습니다. 두 사양 패턴간에 변환하는 개념적인 방법을 찾고 있습니다.OCaml에서의 파일 변환

1 2 "tau1"
1~3 "H1"
2 1 "H1"

1 tau1으로 2, H1 : 3;
2h1 : 1;

일반적으로 파일 크기가 훨씬 큽니다. 레코드 형식을 사용하고 행의 입력 파일 줄을 읽은 다음 다른 파일에 쓸 수 있다고 생각합니다. 하지만 더 좋은 방법이 있습니까? Ocamlyacc 또는 비슷한 구문 분석 및 변환을 사용 하시겠습니까? 다른 건 없나요?

답변

5

모두 현재 및 미래의 필요에 따라 다릅니다.

이 지식을 재사용 할 수있는 기회가 있다고 생각되는 경우 분석 도구를 학습하십시오.

반면에 구문 분석에 필요한 파일 형식이 단순 해 보이므로 형식이 발전하지 않으면 전용 파서를이 형식으로 직접 작성하는 것이 빠릅니다.

+1

내가 말하려고했던 것! 사실, 이것이 OCaml을 배우는 연습 (위대함)이 아니라면 awk 나 python의 한두 줄에서 할 수 있습니다. –

+0

이것은 실제로 학습 운동 (OCaml을 선택한 이유)과 내가 필요로하는 것입니다. 나는 당신의 조언을 따르고 awk 나 python을 사용할지도 모른다고 생각하고, 더 많은 시간을 가질 때 OCaml에서 시도해 보겠습니다. 나는 awk를 지금 배워야한다고 생각합니다. 감사. – user2154457

0

데이터가 매우 단순하여 Scanf.fscanf은 각각 한 줄을 구문 분석 할 수 있습니다. 아래 코드는 한 행을 읽고 튜플 값을 제공합니다.

let ic = open_in "data.txt" in 
    Scanf.fscanf "%d %d %s\n" (fun index value key -> (index, value, key)) 

포맷 사양은 C의 scanf과 비슷합니다. key에서 큰 따옴표를 제거하려면 "%s""\"%[0-9a-aZ-Z]\""으로 바꾸십시오.

메모리 부족 문제가 여전히 남아 있지만 해결 방법이 마음에들 수도 있습니다.