[Fortran] 다른 길이를 가진 character 변수 파일 읽기
파일 사이즈가 상당히 큰 파일을 빠르게 읽을 수 있는 방법에 대하여 찾고 있는중입니다.
포트란에서는 다른 프로그래밍 언어와는 다르게 각기 다른 길이의 문자를 자동으로 읽는 방법이 없는것 같아서 이렇게 질문을 드립니다.
예를 들면)
-10 0 10 10 0 -10 NA NA -10 0 10 .................
0 0 10 0 10 -10 -10 0 0 0 NA NA ..................
NA NA NA NA 0 0 0 -10 -10 0 10 ...............
.
.
.
위와 같은 형식으로 상당히 큰 파일을 (5.5GB) 읽어 들여야 하는 상황입니다.
저의 짧은 지식으로는 우선 "NA"와 같은 문자를 포함하고 있어서 문자 형식의 배열을 선언을 해야한다고 생각하고 있습니다.
문제는 각 원소별로 문자의 길이가 동일하지 않는것이 문제가 되고 있습니다.
그리하여 현재는 adjustable character array를 선언해서 라인을 통째로 하나의 변수로 잡아서 읽어드리는 방법을 택하고 있습니다.
그런데 우선 길이에 대한 임의값을 부여하고 읽어드리고 있는데, 시간이 상당히 오래걸리고 있습니다.
컬럼수도 상당히 많이 있어서 아주 큰 값을 부여해서 그런것 같습니다 (len=20000000).
!### declare variables for adjustable characters array ###!
type adjChr
character(len=:), pointer :: posn
end type adjChr
type(adjChr), pointer :: ABarray(:)
character(len=20000000) :: temp
.
.
.
DO i=1,nIDs
nline=i
READ(201,"(a)") temp
nStrings=LEN_TRIM(temp)
ALLOCATE(CHARACTER(LEN=nStrings)::ABarray(nline)%posn) !! allocate each whole line as a character pointer
ABarray(nline)%posn=temp
ENDDO
위와 같이 선언을 해서 한줄씩 읽어드리고 있는데 정말 오랜시간이 걸리더라구요.
혹시 위와 같은 경우에는 길이를 3정도로 선언하게 되면 모든 변수를 읽어 드릴수 있게되는데,
문자 변수나 배열에 대한 maximum 길이를 선언할 수 있는 방법이 있는지 궁금합니다.
만약 그냥 (LEN=3) 으로 하게되면 무조건 3자리씩 끊어서 읽어드리기 때문에 정확히 파일을 읽어드릴 수 없는 상황인것 같습니다.
혹시 이러한 부분에 대하여 해결방안이 있으신 분이 계시다면 조언 부탁드리겠습니다.
감사합니다.
이것을 참고해보세요.
검색해보니. 여러가지 예제 소스가 보입니다. 참고해보면. 좋을거 같습니다.
fortran file
http://www.codeproject.com/search.aspx?q=fortran+file&x=0&y=0&sbo=kw
Fortran
http://book.naver.com/search/search.nhn?sm=sta_hty.book&sug=&where=nexearch&query=Fortran+
Fortran 파일 읽기
https://www.google.co.kr/search?q=%5BFortran%5D+%EB%8B%A4%EB%A5%B8+%EA%B8%B8%EC%9D%B4%EB%A5%BC+%EA%B0%80%EC%A7%84+character+%EB%B3%80%EC%88%98+%ED%8C%8C%EC%9D%BC+%EC%9D%BD%EA%B8%B0&oq=%5BFortran%5D+%EB%8B%A4%EB%A5%B8+%EA%B8%B8%EC%9D%B4%EB%A5%BC+%EA%B0%80%EC%A7%84+character+%EB%B3%80%EC%88%98+%ED%8C%8C%EC%9D%BC+%EC%9D%BD%EA%B8%B0&aqs=chrome..69i57j69i61&sourceid=chrome&ie=UTF-8#q=Fortran++%ED%8C%8C%EC%9D%BC+%EC%9D%BD%EA%B8%B0
Fortran 파일 읽기
https://search.naver.com/search.naver?ie=utf8&sm=stp_hty&where=se&query=Fortran++%ED%8C%8C%EC%9D%BC+%EC%9D%BD%EA%B8%B0
------------------------------------------------------------
파일보다는 메모리가 빠릅니다. 램디스크 사용하시면. 빠릅니다. (성능관련 이슈는 여기가 좋습니다. http://www.parkoz.com/)
USB 3.1 도 빠릅니다. SSD PCI-E 도 빠릅니다.
GPU 가 CPU 보다 빠릅니다. HEVC DXVA2 도 빠릅니다.
SSE AVX2 MMX 도 약간에 성능향상이 있습니다.
하이퍼 스레드. 멀티코어. 멀티스레드. 도 약간에 성능향상이 있습니다.
저는 CreateFileMapping 으로 상당한 파일 복사 성능을 경험한적이 있습니다. (약 2배이상)
메모리 - 메모리 맵 파일, CreateFileMapping, MapViewOfFile
http://blog.daum.net/_blog/BlogTypeView.do?blogid=0RF3R&articleno=16
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
댓글 달기