質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

FORTRAN

FORTRAN(フォートラン)は科学時術計算に向いた手続き型プログラミング言語です。 並列計算の最適化が行いやすい特性上、数値予報および気候モデルなどの大規模な計算を行う分野のスーパーコンピュータで使われています。

Q&A

2回答

4815閲覧

fortranプログラムで処理した連番ファイルを別のフォルダに保存したい。

fordo

総合スコア2

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

FORTRAN

FORTRAN(フォートラン)は科学時術計算に向いた手続き型プログラミング言語です。 並列計算の最適化が行いやすい特性上、数値予報および気候モデルなどの大規模な計算を行う分野のスーパーコンピュータで使われています。

0グッド

0クリップ

投稿2021/05/04 10:30

編集2021/05/04 12:03

fortranプログラムで処理した連番ファイルを別のフォルダに保存したい。

作業フォルダ内の、行列が書かれた連番のテキストファイルの要素の値を、
閾値以上は255、それ以下は0に変え、作業フォルダ内の新しいフォルダに同名の出力ファイルを作成して書きこむシステムをfortranで作っています。

作業フォルダには'abcde_xxx.bw.txt'という名前の入力ファイルが複数入っており、
xxxのところに001~の連番が入ります。それ以外の部分は全て共通です。

そのファイルを読み込みIF文で処理したうえで、
同名のファイルを新しいフォルダに作成し、内容を保存したいと思っております。

出力ファイルの保存先パスを、別のフォルダに指定する機能を実装中に以下のエラーメッセージが発生しました。

write (filename, "(a,'_',i3.3,'bw.txt')")trim(dataname),i !連番ファイル名の生成 open(11, file='./新しいフォルダー/' trim(filename), status='new')

ソースコードの後半部分ででこのようにして出力ファイルを開き、
その保存先のパスを、作業フォルダ内の”新しいフォルダー”に設定したいのですが、
すると下のようなエラーが出てしまいます。

C:\Users\Downloads\2 3500fps\binarization_for_txt.f90:68:38: 68 | open(11, file='./新しいフォルダー/' trim(filename), status='new') | 1 Error: Syntax error in OPEN statement at (1)
file='./新しいフォルダー/trim(filename)'

のようにするとエラーは出ませんが、trim(filename)がただの文字列と認識されてしまうので,trim(filename).txtというファイルが作成され、プログラムが終了してしまいます。
解決方法など、分かる方がいたらよろしくお願いいたします。

該当のソースコード

Fortran

1program main 2 3implicit none 4 5character*30 filename !txtファイルの名前 6character*30 dataname !txtファイルの名前の拡張子,連番を除いた部分 7character*30 fname 8character*1 dummy 9 10integer :: i,j,k !繰り返し変数 11integer, dimension(1,800):: pix1 !txtファイルの1行目 12integer, dimension(800,800):: pix !txtファイルの2行目以降 13integer :: thr !2値化の際の閾値 14integer :: Nmax !txtファイルの数 15 16 17 18 19 20 21 print*,"input condition name. ex)1o10C334000_1" 22 read*, dataname 23 24 25 print*,"input the number of txt_file" 26 read*, Nmax 27 28 print*,"What is the threshold?" 29 read*, thr 30 31 32 33 do i=0, Nmax 34 35 write (filename, "(a,'_',i3.3,'bw.txt')")trim(dataname),i 36 37 38 open(10, file=trim(filename), status='old') 39 print*, trim(filename) 40 41 42 43 44 do j=1,1 45 read(10,*) (pix1(j,k), k=1,768) !入力ファイルの1行目を配列に格納 46 end do 47 48 do j=1,768 49 read(10,*) (pix(j,k), k=1,769)   !同2行目以降を配列に格納 50 end do 51 52 53 do j=1,768 54 do k=2,769 55 56 if (pix(j,k)<thr) then !2値化の処理 57 pix(j,k)=0 58 else 59 pix(j,k)=255 60 end if 61 62 end do 63 end do 64 65 66 !write (fname, "(i3.3,'bw.txt')")i 67 write (filename, "(a,'_',i3.3,'bw.txt')")trim(dataname),i 68 open(11, file='./新しいフォルダー/' trim(filename), status='new') 69 70 71 do j=1,1 72 write(11, '(*(i3,1x))') (pix1(j,k), k=1,768) 73 end do 74 75 do j=1,768 76 write(11, '(*(i3,1x))') (pix(j,k), k=1,769) 77 end do 78 79 close(11) 80 81 close(10) 82 83 84 end do !'i' 85 86 end 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

文字列連結をしてもいいですし、ファイル名を生成する所で、ディレクトリ名もくっつておく手もあります。

fortran

1 write (filename, "(2a,'_',i3.3,'bw.txt')")'./新しいフォルダー/',trim(dataname), i

投稿2021/05/04 11:42

curehoney

総合スコア249

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Fortranで、文字列を連結するのは、//という二項演算子です。

投稿2021/05/04 11:27

otn

総合スコア85901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問