Fortran90で任意のファイル名(文字列)から拡張子を取得するサブルーチンを作りました。ちょっとだけググってそれらしいものが無かったので。
モジュールの形にして別ファイルにしています。
extension.f90
module m_extension implicit none public parse_filename integer(kind=8), parameter :: NAME_LEN = 80 integer(kind=8), parameter :: EXT_LEN = 80 contains subroutine parse_filename(name, base, ext) character(len=NAME_LEN), intent(in) :: name character(len=NAME_LEN), intent(out) :: base character(len=EXT_LEN), intent(out) :: ext integer(kind=8) :: idot integer(kind=8) :: name_len idot = index(name, ".", back=.true.) name_len = len_trim(name) if( idot == 0) then base = name elseif( idot > 1) then base = name(1:idot-1) else base = "" endif if ( idot /= 0) then ext = name(idot+1:name_len) else ext = "" endif end subroutine parse_filename end module m_extension
main.f90 (テスト用のメインルーチンです。)
program main use m_extension implicit none character(len=NAME_LEN) :: filename character(len=NAME_LEN) :: basename character(len=EXT_LEN) :: extension ! test 1 write(*,*) "# test 1" filename = "sample.hoge.txt" write(*,*) "filename = ", trim(filename) write(*,*) "## parse_filename" call parse_filename(filename, basename, extension) write(*,*) "basename = ", trim(basename) write(*,*) "extension = ", trim(extension) ! test 2 write(*,*) "# test 2" filename = "sample" write(*,*) "filename = ", trim(filename) write(*,*) "## parse_filename" call parse_filename(filename, basename, extension) write(*,*) "basename = ", trim(basename) write(*,*) "extension = ", trim(extension) end program main
FC=ifort FCFLAGS=-O3 LDFLAGS=-I. OBJS=m_extension.o MODULES=m_extension.mod main: main.f90 $(OBJS) $(FC) $(FCFLAGS) -o $@ $< $(OBJS) .SUFFIXES: .SUFFIXES: .f90 .o .mod .f90.o: $(FC) $(FCFLAGS) -c -o $@ $< .f90.mod: $(FC) $(FCFLAGS) -c -o $@ $< clean: $(RM) -f main $(OBJS) $(MODULES)