現在のオペレーティングシステムのファイル区切り記号を取得する方法を教えてください。たとえば、Windowsでは\
、Unixでは/
、実行時にはFortranです。Fortranでファイル区切りを取得する
答えて
Fortran 2003標準組み込みプロシージャーGET_ENVIRONMENT_VARIABLE
を使用して、このようなことを行うことができます。例:
CHARACTER(LEN=99999) :: path
CHARACTER(LEN=1) :: path_separator
CALL GET_ENVIRONMENT_VARIABLE('PATH',path)
path_separator=path(1:1)
WRITE(*,*)'Path separator is ',path_separator
END
このプログラムは、UNIXまたはLinuxのパス区切り文字として "/"を出力します。あなたは他の環境変数からもこれを得ることができます。この例は、UNIX/Linuxの場合に固定されています。たとえば、抽出するために少し異なるロジックが必要になります。 "\"はWindows用ですが、私はこのシステムに精通していません。 Win95から "c:\ ....."のようなものを覚えていますので、Windowsの場合はpath(3:3)
で "\"を探します。
これが役に立ちます。
最初の文字を抽出するには、PATH環境変数から99999文字を読み込む必要がありますか? – Chris
@Chris +1いいえ。長さを取らなければならないとき(たとえば、Windowsでどのように見えるかわからないなど)、私は任意に長く行きます。私は99の長さはちょうどいいと思う。 – milancurcic
@Chris 99999文字は実際には読み込まれないことに注意してください。プログラムは、パスの長さが何であっても読み込みます。残りの部分は空白になるだけです。 – milancurcic
私が知る限り、Fortran標準は、ファイルシステムのパス区切りについて何も言わない。私が提案できる最適なのは、適切なセパレータを定義するマクロを定義することです。たとえば
について#if __unix__
character(len=1), parameter :: path_sep='/'
#elif _WIN32
character(len=1), parameter :: path_sep='\'
#else
#error "path_sep not defined. Set this constant for your system."
#endif
はしかし、Windows上は、あなたのパス区切り(それを試してみてください!)ので、ほとんどのシステムでは、パスの区切りと特別な何かをする必要がないよう/
または\
のいずれかを使用することができます。
実行時にパス区切りを指定する必要はありません。。新しいシステムごとにFortranソースを再コンパイルする必要があるので、新しいシステムごとにコンパイル時に正しいパス区切りを指定する必要があります(パスの区切り文字は、同じシステム上のプログラム)。
上記のようなプリプロセッサマクロを使用することは明らかです。コードを移植する新しいシステムごとに新しい#elif
句を追加するだけです。これは、他の答えが示唆するような特定の環境変数をチェックするピクシール解を導入するよりも簡単です。
さらに、パス区切り文字を指定する場合は、オペレーティングシステム環境の他の側面についてもパラメータを設定する必要があります。たとえば、現在のディレクトリ文字と親ディレクトリの文字(それぞれWindowsとPOSIXシステムの場合は.
と..
)です。
最後に、プリプロセッサーが__unix__
と_WIN32
と定義しているのは、どのシステムを使用しているかを示す広く使用されているシステムで、どのシステムに依存しているかはほとんどのコンパイラーで設定する必要があります。これらのマクロの1つを設定するためにソースをコンパイルするときは、通常、フラグ-D__unix__=1
または-D_WIN32=1
を使用することができます。 -cpp
(gfortran)または-fpp
(ifort)コマンドラインオプションを使用してコードを前処理するか、ソースファイルの拡張子を.f
から.F
または.f90
から.F90
に変更します。
IRO-ボットの提案に続いて、新しい環境変数を作ることができ、UNIX
で例えば
export DELIMITER='/'
今だけ「\」で、ウィンドウ内の対応する変数を作成し、あなたが優れています行く。
は、Windowsでグローバル変数を設定するために、あるいはそうする権利を持っていない、.BATファイルでセットの詳細について
set DELIMITER=\
を以下に置き、見たくない場合http://www.ss64.com/nt/set.html setを使用する場合は、CMDからfortranプログラムを実行する必要があります。
Finalyはなく、1つの修正と、私はむしろ、上記4のソリューションを好むあなたのFORTRANファイルに
CHARACTER :: delimiter
CALL get_environment_variable('DELIMITER',delimiter)
を次のように置く:
function delimiter_detect() result(delim)
character(LEN=1) :: delim
character(LEN=258) :: path
integer :: ii, stat_out
call GET_ENVIRONMENT_VARIABLE('HOME',path,status=stat_out)
if (stat_out/=0) go to 999
! xxx path='xx\' ! alternate test
do ii=1, 258
delim=path(ii:ii)
if (delim=='/'.or.delim=='\') return
! ... Note: emacs does not recognize the second delimiter test
enddo
999 continue
write(*,'(1x,a/1x,a/1x,a)') 'Could not obtain home directory path.', &
'Restart program and manually insert path', &
'to folder/directory containing input files.'
stop
end function delimiter_detect
私はコンセプトをテストしていません、と述べましたWindows OS上で。
この変更内容を教えてください。あなたがどの答えを参照するのかは明らかではありません。 – francescalus
- 1. Fortranでカンマ区切りのテキストファイルを行単位で読む
- 2. Javaのファイルを区切り文字で読み取る
- 3. ディレクトリ内のすべてのファイルを区切り記号で区切ります。
- 4. カンマ区切りのフィールドからデータを取得するSQL
- 5. 空白で区切られたフィールドを他のコンマ区切りフィールドで取得する(ループ?)
- 6. Instagram APIコンマ区切りIDでバルクオブジェクトを取得
- 7. コンマ区切りファイルから値を読み取る方法は?
- 8. 場所を保存できる区切りの区切り
- 9. ノードのシリアルポートから取得したデータを区切ります
- 10. linqを使用してエンティティコレクションのコンマ区切りリストを取得
- 11. 読み取るタブ区切りファイルの行がない
- 12. 区切り文字で区切り文字を区切り、改行して印刷する
- 13. カンマ区切りオブジェクトから最初の項目を取得
- 14. 数字を ' - 'で区切って取得する
- 15. SQL Serverでコンマ区切りの値を取得する方法は?
- 16. Androidで日付区切り記号を取得する方法は?
- 17. パイプ文字区切り文字でフィールドを区切る方法
- 18. タブを区切ります。c#.netから区切られたtxtファイル
- 19. 区切り記号で区切りリストの値を設定する - Python
- 20. スペース区切り文字でファイルを解析する
- 21. PythonでCSV /タブ区切りのtxtファイルを解析する
- 22. 区切り文字で文字列を検索するファイル
- 23. Unix:文字列を正規表現の区切り文字で切り取る
- 24. Python:区切り文字のリストで区切り文字
- 25. スペースで区切られたファイルを読み取る方法
- 26. jqueryを使用してjavascriptのページ区切りデータを取得するには?
- 27. 区切り
- 28. ワードプレスショートコードページ区切り
- 29. TSQL:sequenctially区切り
- 30. Silverlightファイルのパス区切りの問題
「現在のOSのパス区切り文字」?それは何ですか? – Rook
現在のOSを編集しました - 魔女のオペレーティングシステムが実行されます –
ああ、もちろん..... – Rook