3

私のプログラムでは、さまざまなケースの結果ファイルを保存する必要があります。これらの結果ファイルを格納するために別のディレクトリを作成することにしました。ここで正確な状況を説明するために、疑似コードがあります。

do i=1,N     ! N cases of my analysis
    U=SPEED(i)
    call write_files(U)     !Create a new directory for this case and Open files (1 = a.csv, 2 = b.csv) to write data
    call postprocess()      !Write data in files (a.csv, b.csv)
    call close_files()      !Close all files (1,2)
end do

subroutine write_files(i)
    !Make directory i
    !Open file a.csv and b.csv with unit 1 & 2
    !Write header information in file a.csv and b.csv
close subroutine

call system('mkdir out/' trim(U))結果を格納するために別のフォルダーを作成するために使用できるように、実際の変数 U を文字変数に変換するのに苦労しています。

また、変数 U は速度であり、これは次のようなもの0.00000, 1.00000, 1.50000です。ディレクトリ名を単純化して、などのようにする方法はありますか0,1,1.5?

私の説明が明確であることを願っています。お知らせいただけない場合は、必要に応じて編集してみます。

ご協力ありがとう御座います。

4

1 に答える 1

4

の引数はsystem文字列である必要があります。したがって、を文字列にキャストし、そのreal文字列と連結mkdir out/する必要があります。簡単な例を次に示します。

module dirs 
contains
  function dirname(number)
    real,intent(in)    :: number
    character(len=6)  :: dirname

    ! Cast the (rounded) number to string using 6 digits and
    ! leading zeros
    write (dirname, '(I6.6)')  nint(number)
    ! This is the same w/o leading zeros  
    !write (dirname, '(I6)')  nint(number)

    ! This is for one digit (no rounding)
    !write (dirname, '(F4.1)')  number
  end function
end module

program dirtest
  use dirs

  call system('mkdir -p out/' // adjustl(trim( dirname(1.) ) ) )
end program

call system(...)非標準の代わりに、Fortran 2008 ステートメントを使用できexecute_command_lineます (コンパイラがサポートしている場合)。

call execute_command_line ('mkdir -p out/' // adjustl(trim( dirname(1.) ) ) )
于 2013-10-29T17:34:15.957 に答える