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
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。