• ベストアンサー

commonで定義した変数を文字型に変換してファイル名に使いたいのですが(fortran)

たとえば計算ループの反復回数のカウントにniterという変数を使っているとします。 niterが10の倍数になる度にniterの数をファイル名にしてそれぞれの結果をそれぞれのファイルに出力したいのですが,うまくいきません。 open(10,file='file' // CHAR(ICHAR('0'+niter) // '.txt' &,status='unknown') のようにするようにと教わったのですが、これだけではうまくいかないので詳しい方教えていただけませんか? 

質問者が選んだベストアンサー

  • ベストアンサー
  • hofuhofu
  • ベストアンサー率70% (336/476)
回答No.1

詳しいというわけでもありませんが。 > CHAR(ICHAR('0')+niter) これでは一桁の数にしか対応できないのではないでしょうか? 10の倍数であれば、10で割って CHAR(ICHAR('0')+niter/10) としてみては。 二桁以上に対応しようとすると、CHAR/ICHARでもできなくはないですが、面倒なので私なら、 character*10 filename write(filename,'("file",I2.2,".txt")') niter open(10,file=filename) としちゃいます。

masa2-1
質問者

お礼

ありがとうございます。 早速やってみました。できました。 文字型なんて使ったことなかったんで 助かりました。

関連するQ&A

  • fortran77で複数のファイルの読み込み

    fortran77で複数のファイルの読み込み 現在fortran77のプログラムを勉強しております。 ファイルが複数あり、すべてのファイルを読み込みたいのですが、ファイルの数がたくさんあるため、プログラムの行数が多くなってしまいます。 do ループで次々とファイルを開くプログラムを考えているのですが、思いつきません。 どなたか考え方でもいいので、教えてください。 ちなみに私が考えたプログラムは、 open(10,file='C:\FORTRAN\100.txt',status='old') open(11,file='C:\FORTRAN\121.txt',status='old') open(12,file='C:\FORTRAN\144.txt',status='old') open(13,file='C:\FORTRAN\169.txt',status='old') open(14,file='C:\FORTRAN\196.txt',status='old') open(15,file='C:\FORTRAN\225.txt',status='old') ・・・。 これを do ループで次々に開くことを考えると、 character*3 A(10) do 100 i=1,10 A=i*i open(i,file='C:\FORTRAN\A.txt',status='old') 100 continue ・・・ みたいな感じです。 ' 'の中の一部だけを変えたい場合のcharacter 文の使い方がいまいちよく分かりません。

  • fortran90 ファイル出力の名前

    ファイル出力の仕方なのですが do j=1,step ・ ・ ・ OPEN(3, FILE = "nucsig12.txt", STATUS = "old", ACTION = "WRITE") DO i=1,nucnum WRITE(3,*) i,nucsig12(i) END DO CLOSE(3) ・ ・ のようにstepごとにファイルの出力をしたいのですが テキスト名をstepごとに変えたいのですがどうしたらよいのでしょうか?? OPEN(3, FILE = "nucsig12.txt", STATUS = "old", ACTION = "WRITE") の部分をどう修正したらいいのか・・・ 理想としては "nucsig12[step].txt"(stepには数字をいれたい) というようにstepと同じ数のテキストファイルを作りたいです こういうことはできるのでしょうか?? もしできるなら教えてください お願いしますm(__)m

  • Fortran において変数の定義

    現在Fortranを使いプログラムをしていますが、円の面積を計算するため変数を定義しているところでおかしな問題が出てきました。円周率を定義するところで自分でつけた変数名 PAI の値が入力データと違うことに気づきました。以下のように簡単なプログラムを作って試したのですが結果は同じくおかしな値が出てきました。 IMPLICIT REAL*8(A-Z) PAI=3.14159265 WRITE(*,1)PAI 1 FORMAT(E30.22) PAUSE END 結果は 0.3141592741012573000000E+01 とディスプレイに表示され、このあとにPAIを使った計算があるならこの値で計算されます。私としては、PAI=3.14159265と出力し、計算もしたいのですが... これは FORTRAN 自体の特有の性質なのでしょうか、それともソフト、ハード的な問題なのでしょうか? 尚、変数 PAI をファイルから読み込んだり、PAI=4.0*ATAN(1.0) (PAI=3.1415926535897930 となりますが)、PAI=3.14159265D+00などにすると正確に表示、計算出来ます。

  • アスタリスクを文字列として変数に入れるには

    HP-UX cshで、アスタリスクを文字列として 変数に入れるにはどうしたら良いでしょうか? 現在は <file3の中身> grep -v file*.txt | grep -v file2.txt で、 set hensu=`cat file3.txt`としてecho $hensuすると grep -v file1.txt file2.txt file3.txt | grep -v file2.txt という具合に、アスタリスクがワイルドカードとして 働きます。これを「file*.txt」という文字列として 変数に入れる方法を教えてください。 宜しくお願いします。

  • DOSのバッチで、変数中のファイル名を取り出すには

    DOSのバッチの初心者です。 $FILEという変数に、 C:\Documents and Settings\Administrator\My Documents\okwave.txt のようにファイル名がフルパスで入ってくるとします。このファイル名だけ(okwave.txt)を別の変数に入れたいのですが、うまくいきません。 set f=%$FILE% set g=%%~nf echo %g% 上のように書いてみたのですが、変数gは%~nfという値が入ってしまいます。どう直せばよいでしょうか。

  • FORTRAN:出力ファイルをフォルダごとに整理するには

    出力ファイルの数が多いので、出力と同時にフォルダごとに整理したいのですがうまくいきません。 具体的に言うと、例えば CHARACTER DEF(2)*1 DATA DEF/'1.txt','2.txt'/ DO 10 NB=1,2 OPEN(10,FILE='A-A\output-'//DEF(NB)) 10 CONTINUE END というプログラムで出力すると、 A-Aというフォルダ内にoutput-1.txt、output-2.txtが作成されます。 これを発展させて、二つ以上のフォルダ内に出力する方法をいろいろ試したのですが、うまくいきません。 わかる方がいらっしゃれば、どうかご回答お願いいたします。 以下は、試したがうまくいかなかったプログラムです。 CHARACTER ABC(2)*5 CHARACTER DEF(2)*1 DATA ABC/'A','B'/ DATA DEF/'1.TXT','2.TXT'/ DO 20 NA=1,2 DO 10 NB=1,2 OPEN(10,FILE='A-'//ABC(NA)\output-'//DEF(NB)) 10 CONTINUE 20 CONTINUE END

  • FORTRAN:出力ファイルをフォルダごとに整理するには

    出力ファイルの数が多いので、出力と同時にフォルダごとに整理したいのですがうまくいきません。 具体的に言うと、例えば CHARACTER DEF(2)*1 DATA DEF/'1.TXT','2.TXT'/ DO 10 NB=1,2 OPEN(10,FILE='A-A\output-'//DEF(NB)) 10 CONTINUE END というプログラムで出力すると、 A-Aというフォルダ内にoutput-1.txt、output-2.txtが作成されます。 これを発展させて、二つ以上のフォルダ内に出力する方法をいろいろ試したのですが、うまくいきません。 わかる方がいらっしゃれば、どうかご回答お願いいたします。 以下は、試したがうまくいかなかったプログラムです。 CHARACTER ABC(2)*5 CHARACTER DEF(2)*1 DATA ABC/'A','B'/ DATA DEF/'1.TXT','2.TXT'/ DO 20 NA=1,2 DO 10 NB=1,2 OPEN(10,FILE='A-'//ABC(NA)\output-'//DEF(NB)) 10 CONTINUE 20 CONTINUE END

  • ファイル名に変数を使う(Java)

    初心者です。よろしくお願いします。 Javaで、ファイル名に変数を使ってファイルを作成する方法を教えて下さい。 例えば1.txtから100.txtまで100個のファイル(全部中身は『1』)を作りたい場合でお願いします。 下のコードを100回のforループに入れればいいと思うのですが、 “○○○”の部分がわかりません。 よろしくお願いします。 try {   PrintWriter fout = new PrintWriter(new BufferedWriter(   new FileWriter("○○○.txt"))); fout.println(1); fout.close(); } catch (Exception e) { System.out.println("書き込みエラー:" + e); System.exit(1); }

    • ベストアンサー
    • Java
  • バイナリファイルをテキストファイルに変換する方法を教えて頂けませんか。

    こんにちは。 バイナリファイルをテキストファイルのように読み込んだり、書き込んだりすることは可能でしょうか。バイナリファイルをテキストファイルとして扱う良い方法があれば是非ご教授頂きたいです。 以下は自分なりに考えたプログラムなのですが、すごく文字化けして出力されてしまいます。どこがいけないんでしょうか。 ####プログラム#### #include<stdio.h> int main(){ FILE *fp,*fp2; char str[1024]; //file.txtはバイナリファイルなのでバイナリモードで開く if((fp = fopen("file.txt","rb")) == NULL){ printf("file.txt:open error"); exit(-1); } //out.txtはテキストファイルとして保存したいのでテキストモードで開く if((fp2 = fopen("out.txt","at")) == NULL){ printf("out.txt:open error"); exit(-1); } //一行ずつバイナリファイルをテキストファイルにして保存 while((fgets(str,1024,fp)) != NULL){ printf("%s\n",str); fprintf(fp2,"%s\n",str); } fclose(fp); fclose(fp2); return 0; } ####ここまで#### 以下が出力されたテキストファイル(out.txt)です。 ^A^Dc ^A^D^L<87> ^Y<98>X^?m?;^D&ordm;?^QI&egrave;&Ccedil; ^A^Dc ^A^D^L<87> ^Y<98>X^?m?;^D&ordm;?^QI0g 酷い文字化けを起こしてしまっています。 解決方法をご存知であれば教えて頂けないでしょうか。どうぞよろしくお願いします。

  • fortranのtxtファイル出力書式について

    こんにちは。 fortranのtxtファイル出力について質問させていただきます。 下記のようなコードでtxtファイルに計算結果を出力させています。(途中省略) open(20, file ='outputx1.txt') do ax1 = 1, m do ax2 = 1, l if (sum2(ax1, 1, ax2) == 1) then write(20,*) ax1, ax2 endif enddo enddo close(20) ここでm=103,l=300です。 このコードで出力すると、結果は以下のようになります。      9    293      9    294      9    295      10     97      10     98      10     99 しかし、以下のようにtxtファイルを出力したいと考えています。 9 164 9 165 9 166 10 151 10 152 10 153 *の部分を色々といじってみたのですが、うまいやり方が見つかりません。 説明不足とは思いますが、アドバイスよろしくお願いします。

専門家に質問してみよう