Clicky

Fortran Wiki
mm_ioutils (Rev #2, changes)

Skip the Navigation Links | Home Page | All Pages | Recently Revised | Authors | Feeds | Export |

Showing changes from revision #1 to #2: (追記) Added (追記ここまで) | (削除) Removed (削除ここまで) | (削除) Chan (削除ここまで)(追記) ged (追記ここまで)

This is a small library that I use to make the input and output routines of FORTRAN a little easier to handle. So far, it’s quite unsophisticated, but I welcome improvements here.

The main features are: * easy and intelligent input of command line arguments, * simple file opening and unit tracking.

I should point out that due to the use of getarg(), the code is not strictly F95.

(削除)

# Usage #

(削除ここまで)
(追記)

Usage

(追記ここまで)

Compile the code and link it to your current program. You also need to make sure that the .mod file is accessible by the program. The library can be included in the main program simply by using

(削除) include (削除ここまで)(追記) use (追記ここまで) mm_ioutils
(追記)

Command-line arguments

(追記ここまで)
(追記) (追記ここまで)

In order to read command line arguments into program variables, use the read_argument() subroutine. This takes two arguments: the first is the index of the argument on the command line (counting from 1), and the second is the variable that is to be written to (this must be of type integer, real or character*).

(削除) 
~~~~~ (削除ここまで)(追記) ! example (追記ここまで)(削除) {: (削除ここまで)(追記) 
 (追記ここまで)(削除)  (削除ここまで)(追記) program  (追記ここまで)(削除) lang (削除ここまで)(追記) example (追記ここまで)(削除) = (削除ここまで)(追記) 
 (追記ここまで)(削除) fortran (削除ここまで)(追記) use (追記ここまで) (削除) } (削除ここまで)(追記) mm_ioutils (追記ここまで)
(削除) ! (削除ここまで)(削除) 
 (削除ここまで)(削除) ! mm_ioutils.f90 (削除ここまで)(削除) 
 (削除ここまで)(削除) ! A set of file handling routines (削除ここまで)(削除) 
 (削除ここまで)(削除) ! (削除ここまで)(削除) 
 (削除ここまで)(削除) ! Michael Murphy, Mar. 2009 (削除ここまで)(削除) 
 (削除ここまで)(削除) ! (削除ここまで)(削除) 
 (削除ここまで)(削除) module  (削除ここまで)(削除) mm_ioutils (削除ここまで)(削除) 
 (削除ここまで)implicit none(削除) interface (削除ここまで)(削除)  (削除ここまで)(削除) read_argument (削除ここまで)(削除) 
 (削除ここまで)(削除) module  (削除ここまで)(削除) procedure (削除ここまで)(削除)  (削除ここまで)(削除) read_argument_int (削除ここまで)(削除) 
 (削除ここまで)(削除) module  (削除ここまで)(削除) procedure (削除ここまで)(削除)  (削除ここまで)(削除) read_argument_float (削除ここまで)(削除) 
 (削除ここまで)(削除) module  (削除ここまで)(削除) procedure (削除ここまで)(削除)  (削除ここまで)(削除) read_argument_float_dp (削除ここまで)(削除) 
 (削除ここまで)(削除) end (削除ここまで)(削除)  (削除ここまで)(削除) interface (削除ここまで)(削除) 
 (削除ここまで)(削除) private (削除ここまで)(削除) 
 (削除ここまで)integer :: (削除) nextunit (削除ここまで)(追記) test_int (追記ここまで)(削除) = (削除ここまで)(追記) 
 (追記ここまで)(削除) 10 (削除ここまで)(追記) call (追記ここまで)(削除) 
 (削除ここまで)(削除) character (削除ここまで)(削除) ( (削除ここまで)(削除) 50 (削除ここまで)(削除) ) (削除ここまで)(削除)  (削除ここまで)(削除) :: (削除ここまで)(削除)  (削除ここまで)(削除) fileprefix (削除ここまで)(削除) = (削除ここまで)(削除) "" (削除ここまで)(削除) 
 (削除ここまで)(削除) public (削除ここまで)(削除)  (削除ここまで)(削除) :: (削除ここまで)(削除)  (削除ここまで)(削除) open_file (削除ここまで)(削除) , (削除ここまで)(削除)  (削除ここまで)(削除) open_fileset (削除ここまで)(削除) , (削除ここまで)(削除)  (削除ここまで)read_argument(削除) , (削除ここまで)(削除)  (削除ここまで)(削除) io_set_prefix (削除ここまで)(削除) 
 (削除ここまで)(削除) contains (削除ここまで)(削除) 
 (削除ここまで)(削除) ! ------------------------------------------------------------------------------ (削除ここまで)(削除) 
 (削除ここまで)(削除) ! function open_file (削除ここまで)(削除) 
 (削除ここまで)(削除) ! opens a file with "unknown" status and returns the unit number (削除ここまで)(削除) 
 (削除ここまで)(削除) function  (削除ここまで)(削除) open_file (削除ここまで)((削除) name (削除ここまで)(削除) , (削除ここまで)(削除)  (削除ここまで)(削除) st (削除ここまで)(削除) ) (削除ここまで)(削除)  (削除ここまで)(削除) result (削除ここまで)(削除)  (削除ここまで)(削除) ( (削除ここまで)(削除) id (削除ここまで)(削除) ) (削除ここまで)(削除) 
 (削除ここまで)(削除) character (削除ここまで)(削除) (*), (削除ここまで)(削除)  (削除ここまで)(削除) intent (削除ここまで)(削除) ( (削除ここまで)(削除) in (削除ここまで)(削除) ) (削除ここまで)(削除)  (削除ここまで)(削除) :: (削除ここまで)(削除)  (削除ここまで)(削除) name (削除ここまで)(削除) 
 (削除ここまで)(削除) character (削除ここまで)(削除) (*), (削除ここまで)(削除)  (削除ここまで)(削除) optional (削除ここまで)(削除)  (削除ここまで)(削除) :: (削除ここまで)(削除)  (削除ここまで)(削除) st (削除ここまで)(削除) 
 (削除ここまで)(削除) integer (削除ここまで)(削除)  (削除ここまで)(削除) :: (削除ここまで)(削除)  (削除ここまで)(削除) id (削除ここまで)(削除) 
 (削除ここまで)(削除) id (削除ここまで)(削除)  (削除ここまで)(削除) = (削除ここまで)(削除)  (削除ここまで)(削除) nextunit (削除ここまで)(削除) 
 (削除ここまで)(削除) nextunit (削除ここまで)(削除)  (削除ここまで)(削除) = (削除ここまで)(削除)  (削除ここまで)(削除) nextunit (削除ここまで)(削除)  (削除ここまで)(削除) + (削除ここまで)(削除)  (削除ここまで)1(削除) 
 (削除ここまで)(削除) if (削除ここまで)(削除)  (削除ここまで)(削除) (. (削除ここまで)(削除) not.present (削除ここまで)(削除) ( (削除ここまで)(削除) st (削除ここまで)(削除) )) (削除ここまで)(削除)  (削除ここまで)(削除) then (削除ここまで)(削除) 
 (削除ここまで)(削除) open (削除ここまで)(削除)  (削除ここまで)(削除) ( (削除ここまで)(削除) unit (削除ここまで)(削除) = (削除ここまで)(削除) id (削除ここまで), (削除) file (削除ここまで)(追記) test_int (追記ここまで)(削除) = (削除ここまで)(削除) trim (削除ここまで)(削除) ( (削除ここまで)(削除) fileprefix (削除ここまで)(削除) )// (削除ここまで)(削除) name (削除ここまで)(削除) // (削除ここまで)(削除) ".txt" (削除ここまで)(削除) , (削除ここまで)(削除)  (削除ここまで)(削除) status (削除ここまで)(削除) = (削除ここまで)(削除) "unknown" (削除ここまで))(削除) else (削除ここまで)(削除) 
 (削除ここまで)(削除) open (削除ここまで)(削除)  (削除ここまで)(削除) ( (削除ここまで)(削除) unit (削除ここまで)(削除) = (削除ここまで)(削除) id (削除ここまで)(削除) , (削除ここまで)(削除)  (削除ここまで)(削除) file (削除ここまで)(削除) = (削除ここまで)(削除) trim (削除ここまで)(削除) ( (削除ここまで)(削除) fileprefix (削除ここまで)(削除) )// (削除ここまで)(削除) name (削除ここまで)(削除) // (削除ここまで)(削除) ".txt" (削除ここまで)(削除) , (削除ここまで)(削除)  (削除ここまで)(削除) status (削除ここまで)(削除) = (削除ここまで)(削除) st (削除ここまで)(削除) ) (削除ここまで)(削除) 
 (削除ここまで)(削除) end (削除ここまで)(削除)  (削除ここまで)(削除) if (削除ここまで)(削除) 
 (削除ここまで)(削除) end (削除ここまで)(削除)  (削除ここまで)(削除) function  (削除ここまで)(削除) open_file (削除ここまで)(削除) 
 (削除ここまで)(削除) ! ------------------------------------------------------------------------------ (削除ここまで)(削除) 
 (削除ここまで)(削除) ! function open_fileset (削除ここまで)(削除) 
 (削除ここまで)(削除) ! opens a set of files with numerical suffices and with "unknown" status (削除ここまで)(削除) 
 (削除ここまで)(削除) function  (削除ここまで)(削除) open_fileset (削除ここまで)(削除) ( (削除ここまで)(削除) basename (削除ここまで)(削除) , (削除ここまで)(削除)  (削除ここまで)(削除) n (削除ここまで)(削除) ) (削除ここまで)(削除)  (削除ここまで)(削除) result (削除ここまで)(削除)  (削除ここまで)(削除) ( (削除ここまで)(削除) id (削除ここまで)(削除) ) (削除ここまで)(削除) 
 (削除ここまで)(削除) character (削除ここまで)(削除) (*), (削除ここまで)(削除)  (削除ここまで)(削除) intent (削除ここまで)(削除) ( (削除ここまで)(削除) in (削除ここまで)(削除) ) (削除ここまで)(削除)  (削除ここまで)(削除) :: (削除ここまで)(削除)  (削除ここまで)(削除) basename (削除ここまで)(削除) 
 (削除ここまで)(削除) integer (削除ここまで)(削除) , (削除ここまで)(削除)  (削除ここまで)(削除) intent (削除ここまで)(削除) ( (削除ここまで)(削除) in (削除ここまで)(削除) ) (削除ここまで)(削除)  (削除ここまで)(削除) :: (削除ここまで)(削除)  (削除ここまで)(削除) n (削除ここまで)(削除) 
 (削除ここまで)(削除) character (削除ここまで)(削除) ( (削除ここまで)(削除) 3 (削除ここまで)(削除) ) (削除ここまで)(削除)  (削除ここまで)(削除) :: (削除ここまで)(削除)  (削除ここまで)(削除) suffix (削除ここまで)(削除) 
 (削除ここまで)(削除) integer (削除ここまで)(削除)  (削除ここまで)(削除) :: (削除ここまで)(削除)  (削除ここまで)(削除) id (削除ここまで)(削除) , (削除ここまで)(削除)  (削除ここまで)(削除) i (削除ここまで)(削除) 
 (削除ここまで)(削除) if (削除ここまで)(削除)  (削除ここまで)(削除) ( (削除ここまで)(削除) n.gt (削除ここまで)(削除) .999 (削除ここまで)(削除) ) (削除ここまで)(削除)  (削除ここまで)(削除) then (削除ここまで)(削除) 
 (削除ここまで)write (*,*) (削除) "mm_fileio: (削除ここまで)(追記) test_int (追記ここまで)(削除) More (削除ここまで)(削除) than (削除ここまで)(削除) 999 (削除ここまで)(削除) files (削除ここまで)(削除) required (削除ここまで)(削除) -- (削除ここまで)(削除) aborting" (削除ここまで) 
(追記) 
 (追記ここまで)(削除) stop (削除ここまで)(削除) 
 (削除ここまで)end (削除) if (削除ここまで)(追記) program (追記ここまで)(削除) 
 (削除ここまで)(追記) example (追記ここまで)(削除) id (削除ここまで)(削除)  (削除ここまで)(削除) = (削除ここまで)(削除)  (削除ここまで)(削除) nextunit (削除ここまで)(削除) 
 (削除ここまで)(削除) nextunit (削除ここまで)(削除)  (削除ここまで)(削除) = (削除ここまで)(削除)  (削除ここまで)(削除) nextunit (削除ここまで)(削除)  (削除ここまで)(削除) + (削除ここまで)(削除)  (削除ここまで)(削除) n (削除ここまで)(削除) 
 (削除ここまで)(削除) do (削除ここまで)(削除)  (削除ここまで)(削除) i (削除ここまで)(削除) = (削除ここまで)(削除) 1 (削除ここまで)(削除) , (削除ここまで)(削除) n (削除ここまで)(削除) 
 (削除ここまで)(削除) write (削除ここまで)(削除)  (削除ここまで)(削除) ( (削除ここまで)(削除) unit (削除ここまで)(削除) = (削除ここまで)(削除) suffix (削除ここまで)(削除) , (削除ここまで)(削除)  (削除ここまで)(削除) fmt (削除ここまで)(削除) = (削除ここまで)(削除) '(I3)' (削除ここまで)(削除) ) (削除ここまで)(削除)  (削除ここまで)(削除) i (削除ここまで)(削除) 
 (削除ここまで)(削除) open (削除ここまで)(削除)  (削除ここまで)(削除) ( (削除ここまで)(削除) unit (削除ここまで)(削除) = (削除ここまで)(削除) id (削除ここまで)(削除) +( (削除ここまで)(削除) i (削除ここまで)(削除) - (削除ここまで)(削除) 1 (削除ここまで)(削除) ), (削除ここまで)(削除)  (削除ここまで)(削除) file (削除ここまで)(削除) = (削除ここまで)(削除) trim (削除ここまで)(削除) ( (削除ここまで)(削除) fileprefix (削除ここまで)(削除) )// (削除ここまで)(削除) trim (削除ここまで)(削除) ( (削除ここまで)(削除) basename (削除ここまで)(削除) )// (削除ここまで)(削除) "_" (削除ここまで)(削除) // (削除ここまで)(削除) trim (削除ここまで)(削除) ( (削除ここまで)(削除) adjustl (削除ここまで)(削除) ( (削除ここまで)(削除) suffix (削除ここまで)(削除) ))// (削除ここまで)(削除) ".txt" (削除ここまで)(削除) , (削除ここまで)(削除)  (削除ここまで)(削除) status (削除ここまで)(削除) = (削除ここまで)(削除) "unknown" (削除ここまで)(削除) ) (削除ここまで)(削除) 
 (削除ここまで)(削除) end (削除ここまで)(削除)  (削除ここまで)(削除) do (削除ここまで)(削除) 
 (削除ここまで)(削除) end (削除ここまで)(削除)  (削除ここまで)(削除) function  (削除ここまで)(削除) open_fileset (削除ここまで)(削除) 
 (削除ここまで)(削除) ! ------------------------------------------------------------------------------ (削除ここまで)(削除) 
 (削除ここまで)(削除) ! subr read_argument_int (削除ここまで)(削除) 
 (削除ここまで)(削除) ! reads an integer from the command line and inserts it into a variable  (削除ここまで)(削除) 
 (削除ここまで)(削除) subroutine  (削除ここまで)(削除) read_argument_int (削除ここまで)(削除) ( (削除ここまで)(削除) index (削除ここまで)(削除) , (削除ここまで)(削除)  (削除ここまで)(削除) var (削除ここまで)(削除) ) (削除ここまで)(削除) 
 (削除ここまで)(削除) integer (削除ここまで)(削除) , (削除ここまで)(削除)  (削除ここまで)(削除) intent (削除ここまで)(削除) ( (削除ここまで)(削除) in (削除ここまで)(削除) ) (削除ここまで)(削除)  (削除ここまで)(削除) :: (削除ここまで)(削除)  (削除ここまで)(削除) index (削除ここまで)(削除) 
 (削除ここまで)(削除) integer (削除ここまで)(削除) , (削除ここまで)(削除)  (削除ここまで)(削除) intent (削除ここまで)(削除) ( (削除ここまで)(削除) inout (削除ここまで)(削除) ) (削除ここまで)(削除)  (削除ここまで)(削除) :: (削除ここまで)(削除)  (削除ここまで)(削除) var (削除ここまで)(削除) 
 (削除ここまで)(削除) character (削除ここまで)(削除) ( (削除ここまで)(削除) 12 (削除ここまで)(削除) ) (削除ここまで)(削除)  (削除ここまで)(削除) :: (削除ここまで)(削除)  (削除ここまで)(削除) arg (削除ここまで)(削除) 
 (削除ここまで)(削除) call (削除ここまで)(削除)  (削除ここまで)(削除) getarg (削除ここまで)(削除) ( (削除ここまで)(削除) index (削除ここまで)(削除) , (削除ここまで)(削除)  (削除ここまで)(削除) arg (削除ここまで)(削除) ) (削除ここまで)(削除) 
 (削除ここまで)(削除) if (削除ここまで)(削除)  (削除ここまで)(削除) ( (削除ここまで)(削除) arg.ne. (削除ここまで)(削除) "". (削除ここまで)(削除) and.arg.ne. (削除ここまで)(削除) "?" (削除ここまで)(削除) ) (削除ここまで)(削除)  (削除ここまで)(削除) then (削除ここまで)(削除) 
 (削除ここまで)(削除) read (削除ここまで)(削除) ( (削除ここまで)(削除) unit (削除ここまで)(削除) = (削除ここまで)(削除) arg (削除ここまで)(削除) , (削除ここまで)(削除)  (削除ここまで)(削除) fmt (削除ここまで)(削除) = (削除ここまで)(削除) '(I6)' (削除ここまで)(削除) ) (削除ここまで)(削除)  (削除ここまで)(削除) var (削除ここまで)(削除) 
 (削除ここまで)(削除) end (削除ここまで)(削除)  (削除ここまで)(削除) if (削除ここまで)(削除) 
 (削除ここまで)(削除) end (削除ここまで)(削除)  (削除ここまで)(削除) subroutine  (削除ここまで)(削除) read_argument_int (削除ここまで)(削除) 
 (削除ここまで)(削除) ! ------------------------------------------------------------------------------ (削除ここまで)(削除) 
 (削除ここまで)(削除) ! subr read_argument_float (削除ここまで)(削除) 
 (削除ここまで)(削除) ! reads a float from the command line and inserts it into a variable (削除ここまで)(削除) 
 (削除ここまで)(削除) subroutine  (削除ここまで)(削除) read_argument_float (削除ここまで)(削除) ( (削除ここまで)(削除) index (削除ここまで)(削除) , (削除ここまで)(削除)  (削除ここまで)(削除) var (削除ここまで)(削除) ) (削除ここまで)(削除) 
 (削除ここまで)(削除) integer (削除ここまで)(削除) , (削除ここまで)(削除)  (削除ここまで)(削除) intent (削除ここまで)(削除) ( (削除ここまで)(削除) in (削除ここまで)(削除) ) (削除ここまで)(削除)  (削除ここまで)(削除) :: (削除ここまで)(削除)  (削除ここまで)(削除) index (削除ここまで)(削除) 
 (削除ここまで)(削除) real (削除ここまで)(削除) , (削除ここまで)(削除)  (削除ここまで)(削除) intent (削除ここまで)(削除) ( (削除ここまで)(削除) inout (削除ここまで)(削除) ) (削除ここまで)(削除)  (削除ここまで)(削除) :: (削除ここまで)(削除)  (削除ここまで)(削除) var (削除ここまで)(削除) 
 (削除ここまで)(削除) character (削除ここまで)(削除) ( (削除ここまで)(削除) 12 (削除ここまで)(削除) ) (削除ここまで)(削除)  (削除ここまで)(削除) :: (削除ここまで)(削除)  (削除ここまで)(削除) arg (削除ここまで)(削除) 
 (削除ここまで)(削除) call (削除ここまで)(削除)  (削除ここまで)(削除) getarg (削除ここまで)(削除) ( (削除ここまで)(削除) index (削除ここまで)(削除) , (削除ここまで)(削除)  (削除ここまで)(削除) arg (削除ここまで)(削除) ) (削除ここまで)(削除) 
 (削除ここまで)(削除) if (削除ここまで)(削除)  (削除ここまで)(削除) ( (削除ここまで)(削除) arg.ne. (削除ここまで)(削除) "". (削除ここまで)(削除) and.arg.ne. (削除ここまで)(削除) "?" (削除ここまで)(削除) ) (削除ここまで)(削除)  (削除ここまで)(削除) then (削除ここまで)(削除) 
 (削除ここまで)(削除) read (削除ここまで)(削除) ( (削除ここまで)(削除) unit (削除ここまで)(削除) = (削除ここまで)(削除) arg (削除ここまで)(削除) , (削除ここまで)(削除)  (削除ここまで)(削除) fmt (削除ここまで)(削除) = (削除ここまで)(削除) '(F20.9)' (削除ここまで)(削除) ) (削除ここまで)(削除)  (削除ここまで)(削除) var (削除ここまで)(削除) 
 (削除ここまで)(削除) end (削除ここまで)(削除)  (削除ここまで)(削除) if (削除ここまで)(削除) 
 (削除ここまで)(削除) end (削除ここまで)(削除)  (削除ここまで)(削除) subroutine  (削除ここまで)(削除) read_argument_float (削除ここまで)(削除) 
 (削除ここまで)(削除) ! ------------------------------------------------------------------------------ (削除ここまで)(削除) 
 (削除ここまで)(削除) ! subr read_argument_float_dp (削除ここまで)(削除) 
 (削除ここまで)(削除) ! reads a real(8) from the command line and inserts it into a variable (削除ここまで)(削除) 
 (削除ここまで)(削除) subroutine  (削除ここまで)(削除) read_argument_float_dp (削除ここまで)(削除) ( (削除ここまで)(削除) index (削除ここまで)(削除) , (削除ここまで)(削除)  (削除ここまで)(削除) var (削除ここまで)(削除) ) (削除ここまで)(削除) 
 (削除ここまで)(削除) integer (削除ここまで)(削除) , (削除ここまで)(削除)  (削除ここまで)(削除) intent (削除ここまで)(削除) ( (削除ここまで)(削除) in (削除ここまで)(削除) ) (削除ここまで)(削除)  (削除ここまで)(削除) :: (削除ここまで)(削除)  (削除ここまで)(削除) index (削除ここまで)(削除) 
 (削除ここまで)(削除) real (削除ここまで)(削除) ( (削除ここまで)(削除) 8 (削除ここまで)(削除) ), (削除ここまで)(削除)  (削除ここまで)(削除) intent (削除ここまで)(削除) ( (削除ここまで)(削除) inout (削除ここまで)(削除) ) (削除ここまで)(削除)  (削除ここまで)(削除) :: (削除ここまで)(削除)  (削除ここまで)(削除) var (削除ここまで)(削除) 
 (削除ここまで)(削除) character (削除ここまで)(削除) ( (削除ここまで)(削除) 12 (削除ここまで)(削除) ) (削除ここまで)(削除)  (削除ここまで)(削除) :: (削除ここまで)(削除)  (削除ここまで)(削除) arg (削除ここまで)(削除) 
 (削除ここまで)(削除) call (削除ここまで)(削除)  (削除ここまで)(削除) getarg (削除ここまで)(削除) ( (削除ここまで)(削除) index (削除ここまで)(削除) , (削除ここまで)(削除)  (削除ここまで)(削除) arg (削除ここまで)(削除) ) (削除ここまで)(削除) 
 (削除ここまで)(削除) if (削除ここまで)(削除)  (削除ここまで)(削除) ( (削除ここまで)(削除) arg.ne. (削除ここまで)(削除) "". (削除ここまで)(削除) and.arg.ne. (削除ここまで)(削除) "?" (削除ここまで)(削除) ) (削除ここまで)(削除)  (削除ここまで)(削除) then (削除ここまで)(削除) 
 (削除ここまで)(削除) read (削除ここまで)(削除) ( (削除ここまで)(削除) unit (削除ここまで)(削除) = (削除ここまで)(削除) arg (削除ここまで)(削除) , (削除ここまで)(削除)  (削除ここまで)(削除) fmt (削除ここまで)(削除) = (削除ここまで)(削除) '(F20.9)' (削除ここまで)(削除) ) (削除ここまで)(削除)  (削除ここまで)(削除) var (削除ここまで)(削除) 
 (削除ここまで)(削除) end (削除ここまで)(削除)  (削除ここまで)(削除) if (削除ここまで)(削除) 
 (削除ここまで)(削除) end (削除ここまで)(削除)  (削除ここまで)(削除) subroutine  (削除ここまで)(削除) read_argument_float_dp (削除ここまで)(削除) 
 (削除ここまで)(削除) ! ------------------------------------------------------------------------------ (削除ここまで)(削除) 
 (削除ここまで)(削除) ! subr io_set_prefix (削除ここまで)(削除) 
 (削除ここまで)(削除) ! set a common prefix for all filenames (削除ここまで)(削除) 
 (削除ここまで)(削除) subroutine  (削除ここまで)(削除) io_set_prefix (削除ここまで)(削除) ( (削除ここまで)(削除) prefix (削除ここまで)(削除) ) (削除ここまで)(削除) 
 (削除ここまで)(削除) character (削除ここまで)(削除) (*), (削除ここまで)(削除)  (削除ここまで)(削除) intent (削除ここまで)(削除) ( (削除ここまで)(削除) in (削除ここまで)(削除) ) (削除ここまで)(削除)  (削除ここまで)(削除) :: (削除ここまで)(削除)  (削除ここまで)(削除) prefix (削除ここまで)(削除) 
 (削除ここまで)(削除) fileprefix (削除ここまで)(削除)  (削除ここまで)(削除) = (削除ここまで)(削除)  (削除ここまで)(削除) prefix (削除ここまで)(削除) 
 (削除ここまで)(削除) end (削除ここまで)(削除)  (削除ここまで)(削除) subroutine  (削除ここまで)(削除) io_set_prefix (削除ここまで)(削除) 
 (削除ここまで)(削除) end (削除ここまで)(削除)  (削除ここまで)(削除) module  (削除ここまで)(削除) mm_ioutils (削除ここまで)
(追記) (追記ここまで)(追記)

Compiling and then running the program as example 10 should then simply print the number 10 to the console.

(追記ここまで)
(追記) (追記ここまで)(追記)

File handling

(追記ここまで)
(追記) (追記ここまで)(追記)

The function open_file(name, st) opens a file with the prefix name (note that this may include a path) and with an optional status string st. The function returns the file unit identifier.

(追記ここまで)
(追記) (追記ここまで)(追記)
! example
program example
use mm_ioutils
implicit none
integer :: FTEST
FTEST = open_file("my_dir/my_file.txt")
write (FTEST, *) "Hello World!"
end program example
(追記ここまで)
(追記) (追記ここまで)(追記)

Note that in the above example, since we did not specify st, the file was opened with status "unknown". Secondly, the directory my_dir must exist in the path where the program is run.

(追記ここまで)
(追記) (追記ここまで)(追記)

The function open_fileset(name, n) behaves similarly to open_file, except it opens a set of N files with successive unit identifiers, and all with status "unknown". The returned integer is the unit identifier of the first opened file.

(追記ここまで)
(追記) (追記ここまで)(追記)

Finally, one can also set the prefix used by default for all files (this is useful for specifying a common subdirectory) by using the io_set_prefix command. For example, calling

(追記ここまで)
(追記) (追記ここまで)(追記)
call io_set_prefix("my_dir")
(追記ここまで)
(追記) (追記ここまで)(追記)

will place all subsequently created files in the subdirectory "my_dir" of the directory where the program is being run.

(追記ここまで)
(追記) (追記ここまで)(追記)

Code

(追記ここまで)
(追記) (追記ここまで)(追記)

!
! mm_ioutils.f90
! A set of file handling routines
!
! Michael Murphy, Mar. 2009
!
module mm_ioutils
 implicit none
 interface read_argument
 module procedure read_argument_int
 module procedure read_argument_float
 module procedure read_argument_float_dp
 end interface
 private
 integer :: nextunit=10
 character(50) :: fileprefix=""
 public :: open_file, open_fileset, read_argument, io_set_prefix
contains
! ------------------------------------------------------------------------------
! function open_file
! opens a file with "unknown" status and returns the unit number
 function open_file(name, st) result (id)
 character(*), intent(in) :: name
 character(*), optional :: st
 integer :: id
 id = nextunit
 nextunit = nextunit + 1
 if (.not.present(st)) then
 open (unit=id, file=trim(fileprefix)//name//".txt", status="unknown")
 else
 open (unit=id, file=trim(fileprefix)//name//".txt", status=st)
 end if
 end function open_file
! ------------------------------------------------------------------------------
! function open_fileset
! opens a set of files with numerical suffices and with "unknown" status
 function open_fileset(basename, n) result (id)
 character(*), intent(in) :: basename
 integer, intent(in) :: n
 character(3) :: suffix
 integer :: id, i
 if (n.gt.999) then
 write (*,*) "mm_fileio: More than 999 files required -- aborting"
 stop
 end if
 id = nextunit
 nextunit = nextunit + n
 do i=1,n
 write (unit=suffix, fmt='(I3)') i
 open (unit=id+(i-1), file=trim(fileprefix)//trim(basename)//"_"//trim(adjustl(suffix))//".txt", status="unknown")
 end do
 end function open_fileset
! ------------------------------------------------------------------------------
! subr read_argument_int
! reads an integer from the command line and inserts it into a variable 
 subroutine read_argument_int(index, var)
 integer, intent(in) :: index
 integer, intent(inout) :: var
 character(12) :: arg
 call getarg(index, arg)
 if (arg.ne."".and.arg.ne."?") then
 read(unit=arg, fmt='(I6)') var
 end if
 end subroutine read_argument_int
! ------------------------------------------------------------------------------
! subr read_argument_float
! reads a float from the command line and inserts it into a variable
 subroutine read_argument_float(index, var)
 integer, intent(in) :: index
 real, intent(inout) :: var
 character(12) :: arg
 call getarg(index, arg)
 if (arg.ne."".and.arg.ne."?") then
 read(unit=arg, fmt='(F20.9)') var
 end if
 end subroutine read_argument_float
! ------------------------------------------------------------------------------
! subr read_argument_float_dp
! reads a real(8) from the command line and inserts it into a variable
 subroutine read_argument_float_dp(index, var)
 integer, intent(in) :: index
 real(8), intent(inout) :: var
 character(12) :: arg
 call getarg(index, arg)
 if (arg.ne."".and.arg.ne."?") then
 read(unit=arg, fmt='(F20.9)') var
 end if
 end subroutine read_argument_float_dp
! ------------------------------------------------------------------------------
! subr io_set_prefix
! set a common prefix for all filenames
 subroutine io_set_prefix(prefix)
 character(*), intent(in) :: prefix
 fileprefix = prefix
 end subroutine io_set_prefix
end module mm_ioutils
(追記ここまで)
Revision from May 6, 2009 08:21:13 by Michael Murphy?
Forward in time (to current) | Back in time (1 more) | See current | Hide changes | History | Rollback | View: Source | Linked from: Code

AltStyle によって変換されたページ (->オリジナル) /