[Fortran] 다른 길이를 가진 character 변수 파일 읽기

ANSCLEE의 이미지

파일 사이즈가 상당히 큰 파일을 빠르게 읽을 수 있는 방법에 대하여 찾고 있는중입니다.
포트란에서는 다른 프로그래밍 언어와는 다르게 각기 다른 길이의 문자를 자동으로 읽는 방법이 없는것 같아서 이렇게 질문을 드립니다.

예를 들면)
-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자리씩 끊어서 읽어드리기 때문에 정확히 파일을 읽어드릴 수 없는 상황인것 같습니다.

혹시 이러한 부분에 대하여 해결방안이 있으신 분이 계시다면 조언 부탁드리겠습니다.
감사합니다.

shint의 이미지

검색해보니. 여러가지 예제 소스가 보입니다. 참고해보면. 좋을거 같습니다.

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

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.