fortran에서 특정 확장자 파일만 불러오는거는 어떻게 해야하죠?

andy0128의 이미지

데이터가

예를들어 1.txt 2.txt 4.txt 5.txt 6.txt 11.txt ..등등

이런식으로 데이터가 있습니다

데이터 이름이 순차적이면 do loop를 통해 하나하나 불러올 수 있겠는데

이름이 불규칙적이여서 혹시 확장자명 .txt의 파일들을 순차적으로 불러오게끔하는

그런 방법이 혹시있을까요 ?

아니면 다른방법은 없을까요 ...?

shint의 이미지


----------------------------------------------------
웹 컴파일러
http://ideone.com/
----------------------------------------------------

그냥은 잘 안되네요.
하지만. 떼다 붙이기로 이것저것 해보니. 문자열 출력까지는 됩니다.

책을 한권 보시는게 나을겁니다.

fortran 문자열 분리
https://search.naver.com/search.naver?sm=stb_hty&where=se&ie=utf8&query=fortran+%EB%AC%B8%EC%9E%90%EC%97%B4+%EB%B6%84%EB%A6%AC

스크립트 만들기 [fortran]
http://egloos.zum.com/incredible/v/5008405

call system by 바죠
http://incredible.egloos.com/3474225

2-13 USING STRINGS AND CHARACTER ARRAYS
http://www.ibiblio.org/pub/languages/fortran/ch2-13.html

[참고] 문자열을 문자로 활용 예제 | 포트란
http://cafe.naver.com/toolsinfo/59

Fortran2003 - 유형화 할당-2. 문자열 예
http://blog.naver.com/jujae1/20199379014

Fortran Tutorial
http://seismic.yonsei.ac.kr/fortran/index.html

----------------------------------------------------
읽고 쓰는 예제
----------------------------------------------------
 
program TEST
	integer ans
		do
			read (*,*) ans
			if (ans.eq.42) stop
			write (*,*) ans
		enddo
	stop
end
 
 
---------
입력 내용
---------
1
2
10
42
11
 
 
---------
출력 내용
---------
           1
           2
          10

----------------------------------------------------
5자리 우측에 값을 출력하기
----------------------------------------------------
program TEST
	character(len=20) :: str = '   1234567890.txt'
	str = adjustl(str)
	str = str(5:);
	print *, str
	stop
end
 
 
---------
출력 내용
---------
567890.txt          

----------------------------------------------------
한문자씩 출력하기
----------------------------------------------------
program TEST
	! your code goes here
	integer i
	character(len=20) :: str = '   1234567890.txt'
	do i=1,100
		print *, str(i:i)
	end do
	stop
end
 
 
 
---------
출력 내용
---------
 1
 2
 3
 4
 5
 6
 7
 8
 9
 0
 .
 t
 x
 t

----------------------------------------------------
한문자씩 늘리며 출력하기
----------------------------------------------------
program TEST
	! your code goes here
	integer i
	character(len=20) :: str = '   1234567890.txt'
	do i=1,100
		print *, str(1:i)
	end do
	stop
end
 
 
---------
출력 내용
---------
    1
    12
    123
    1234
    12345
    123456
    1234567
    12345678
    123456789
    1234567890
    1234567890.
    1234567890.t
    1234567890.tx
    1234567890.txt
    1234567890.txt 
    1234567890.txt
    1234567890.txt 
    1234567890.txt
    1234567890.txt 

----------------------------------------------------
.txt 를 찾아서 출력하기
----------------------------------------------------
 
program TEST
	! your code goes here
	integer i
	character ch
	character(len=21) :: str = '   1234567890.txt'
	integer find
	find = 0
	do i=1,20
		ch = str(i:i)
 
		if (ch .EQ. '.') then
			print *, str(i:i)
			find = find + 1
			continue
		endif
 
		if ((ch .EQ. 't') .AND. (find .EQ. 1)) then
			print *, str(i:i)
			find = find + 1
		endif
 
		if ((ch .EQ. 'x') .AND. (find .EQ. 2)) then
			print *, str(i:i)
			find = find + 1
		endif
 
		if ((ch .EQ. 't') .AND. (find .EQ. 3)) then
			print *, str(i:i)
			find = find + 1
		endif
	end do
 
	if(find .EQ. 4) then
		print *, ".txt를 찾았다."
	endif
 
	stop
end
 
 
---------
출력 내용
---------
 .
 t
 x
 t
 .txt를 찾았다.

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

palsuet의 이미지

제가 알기로는 포트란에는 디렉토리의 파일 목록을 가져오는 함수나 서브루틴은 없습니다. 대신 파일 목록을 명령줄 인자로 주면 될 것 같네요.

PROGRAM test
  IMPLICIT NONE
  INTEGER :: stat, n, i, txtfnamelen
  CHARACTER(LEN=1024) :: txtfname
  n = COMMAND_ARGUMENT_COUNT()
  DO i = 1, n
    CALL GET_COMMAND_ARGUMENT(i, txtfname, txtfnamelen, stat)
    PRINT*, txtfname
  END DO
END

실행은

$ ./test *.txt

이 코드가 포트란90에서는 되는데, 그 이전 버전에서도 되는지는 모르겠네요.

feel the gravity

yeonpil_net의 이미지

COMMAND_ARGUMENT_COUNT, GET_COMMAND_ARGUMENT는 2003이상 표준을 지원하는 컴파일러(요즘에 것들의 거의 대부분)에서 지원합니다.

https://gcc.gnu.org/onlinedocs/gfortran/GET_005fCOMMAND_005fARGUMENT.html

"Standard:
Fortran 2003 and later "

!23456---1----+----2----+----3----+----4----+----5----+----6----+----7-2--+----8
"배웠다"는 "할 수 있다"의 동의어가 아니다.

andy0128의 이미지

그럼 90에서는 안되겠네요.. ㅠㅠ

yeonpil_net의 이미지

파일이름의 확장자는 문자열 그 이상 그 이하 아무것도 아닙니다.

님이 예로 드신 상황은 일관적인 파일명을 가지고 있는데..
1, 2, 3..등등 순차적으로 증가하는 이름이 아니라는 것인지..? <- 라고 가정하면

포트란에는 inqiure문이라는 것이 있습니다. 파일의 존재 유무를 체크할 수 있습니다.
open문의 status 속성 또한 도움이 될겁니다. status 의 음의 값을 분기를 하면 될테니까요.

http://www.lahey.com/docs/lfenthelp/F95ARINQUIREStmt.htm

https://docs.oracle.com/cd/E19957-01/805-4939/6j4m0vna3/index.html

https://software.intel.com/en-us/node/525317

꽤 여러 컴파일러마다 OS에 따라 약간 다르겠지만..
디렉토리내 파일목록을 얻을 수 있는 함수들을 각자 구축해 놓고 있긴 합니다.
POSIX지원이라든가..
https://software.intel.com/en-us/node/526231

!23456---1----+----2----+----3----+----4----+----5----+----6----+----7-2--+----8
"배웠다"는 "할 수 있다"의 동의어가 아니다.

yeonpil_net의 이미지

읽어야할 파일의 목록을 가진 파일을 만들고 그 파일에서 리스트대로 오픈하는 것도 방법입니다.

!23456---1----+----2----+----3----+----4----+----5----+----6----+----7-2--+----8
"배웠다"는 "할 수 있다"의 동의어가 아니다.

andy0128의 이미지

저도 포트란에서 폴더 안에 데이터의 파일이름들을 읽어

하나의 리스트를 만든다음 하나하나 불러오는걸 생각해봤는데요

어떻게 시도해야할지 감이 안잡힙니다 ...

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.