0

データ ファイルを書き込めるように、コードから新しいディレクトリを作成する必要があります。

Windows 8の Force Fortran 2.0を使用していますが、フロント/バックスラッシュの問題により、この構文がオペレーティング システムによって異なるのではないかと考えています。

4

1 に答える 1

3

Force Fortran は古いコンパイラ ( g77, g95, gfortran[不明なバージョン]) を使用しているため、 で解決策を提示しsystemます。それをサポートするコンパイラの場合、標準準拠のEXECUTE_COMMAND_LINEを使用することをお勧めします。

mkdirWindows と 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に変換する必要があります。

于 2015-05-31T08:28:54.683 に答える