データ ファイルを書き込めるように、コードから新しいディレクトリを作成する必要があります。
Windows 8の Force Fortran 2.0を使用していますが、フロント/バックスラッシュの問題により、この構文がオペレーティング システムによって異なるのではないかと考えています。
データ ファイルを書き込めるように、コードから新しいディレクトリを作成する必要があります。
Windows 8の Force Fortran 2.0を使用していますが、フロント/バックスラッシュの問題により、この構文がオペレーティング システムによって異なるのではないかと考えています。
Force Fortran は古いコンパイラ ( g77
, g95
, gfortran
[不明なバージョン]) を使用しているため、 で解決策を提示しsystem
ます。それをサポートするコンパイラの場合、標準準拠のEXECUTE_COMMAND_LINEを使用することをお勧めします。
mkdir
Windows と Unix の両方のマシンにある を簡単に使用できます。デフォルトでmkdir
は、Windows にフォルダーと (存在しない) 親フォルダーを作成します。これは、Unix では明示的に指定する必要があります ( -p
)。を使用system
すると、Fortran からこれを実行できます。
program test
implicit none
#ifdef _WIN32
character(len=*),parameter :: MKDIR = 'mkdir '
! ^
! The blank is intentional!
#else
character(len=*),parameter :: MKDIR = 'mkdir -p '
! ^
! The blank is intentional!
#endif
integer :: stat
stat = system( MKDIR // 'testFolder' )
if ( stat /= 0 ) then
print *, 'mkdir: failed to create folder! '
endif
end program
正しいフォルダー区切り文字を処理するルーチンを作成する必要があります。ここに簡単な例を示します。
module conv_mod
contains
function conv2win(str) result(res)
implicit none
character(len=*),intent(in) :: str
character(len=len(str)) :: res
integer :: i
res = str
do i=1,len(res)
if ( res(i:i) == '/' ) res(i:i) = '\'
enddo ! i
end function
function conv2unix(str) result(res)
implicit none
character(len=*),intent(in) :: str
character(len=len(str)) :: res
integer :: i
res = str
do i=1,len(res)
if ( res(i:i) == '\' ) res(i:i) = '/'
enddo ! i
end function
end module
program conv
use conv_mod
print *,conv2win('some/path')
print *,conv2win('some\path')
print *,conv2unix('some\path')
end program
ただし、これは次のようなことは処理しませんC:\
... @VladimirFが指摘したように/
、Windowsでも使用できます。/
バックスラッシュをUnixに変換する必要があります。