#author("2018-11-10T00:23:32+09:00","default:Miyashita","Miyashita") #author("2019-11-15T01:18:44+09:00","default:Miyashita","Miyashita") *数値・文字のファイル出力(テキスト形式) [#a07a219f] 読み込みと異なり,出力はフォーマットを自動に任せてはいられず,指定することがほとんど.このことから大抵はfopen,fprintf,fcloseを使う.~ csvwriteなどでも出力可能だが,フォーマットにこだわる場合は使用できない.~ 読み込みと異なり,出力はフォーマットを自動に任せてはいられず,指定することがほとんど.このことから大抵は fopen, fprintf, fclose を使う.~ csvwrite などでも出力可能だが,フォーマットにこだわる場合は使用できない.~ ***ファイルの開閉 [#sfc23d28] fdirというディレクトリにfnameというファイルを出力するとき, fdir というディレクトリに fname というファイルを出力するとき, #codeprettify(lang-matlab){{ fid = fopen(fullfile(fdir,fname),'w'); }} でファイルを作成する. 書き込み専用を表す「'w'」を使うと,既に同名のファイルが存在していた場合に破棄され空のファイルが生成される.~ 書き込みが終了しファイルを閉じるときは, #codeprettify(lang-matlab){{ fclose(fid); }} または #codeprettify(lang-matlab){{ fclose('all'); }} を使う. ***ファイルへの書き込み [#e11f3684] 1次元目にny個,2次元目にnx個配列された変数hoge(ny,nx)があると仮定する.~ この変数hogeを見た目そのまま出力したい場合は以下のようになる. 1次元目に ny 個,2次元目に nx 個配列された変数 hoge(ny, nx) があると仮定する.~ この変数 hoge を見た目そのまま出力したい場合は以下のようになる. #codeprettify(lang-matlab){{ fmt = [repmat('%10.3f',[1 nx]),'\n']; fprintf(fid,fmt,hoge'); }} 出力するmatrixのhogeは「'」で転置する必要があることに注意.~ fmtで1行分のフォーマットを指定している.横方向にnx個分'%10.3f'があり,最後に改行,という形式.~ Windowsの場合は'\n'ではなく'\r\n'.~ 転置しない場合,hoge(1,1)の次にhoge(2,1)を出力してしまう.おそらくコンピュータ上のメモリ配置順に起因している.~ 出力する matrix の hoge は「'」で転置する必要があることに注意.~ fmt で1行分のフォーマットを指定している.横方向に nx 個分 '%10.3f' があり,最後に改行,という形式.~ Windows の場合は'\n'ではなく'\r\n'.~ 転置しない場合,hoge(1,1) の次に hoge(2,1) を出力してしまう.おそらくコンピュータ上のメモリ配置順に起因している.~ カンマ区切りにしたければ, #codeprettify(lang-matlab){{ '%10.3f,' }} のようにfやeなどの指定子の後にカンマを入れる.カンマでなくとも区切りとして挿入したい文字列を入れることが可能.~ のように f や e などの指定子の後にカンマを入れる.カンマでなくとも区切りとして挿入したい文字列を入れることが可能.~ 同様の出力をFortranでは 同様の出力を Fortran では #codeprettify{{ format(<nx>f10.3) }} とするように,指定子の前後につける文字列の意味が異なる.たまに混同するので注意.