前へ 上へ 次へ
前へ 上へ 次へ
13 CSVファイルを書き出す方法
ここではFortranでCSV形式のファイルを出力する方法を説明します。
13.1 手っ取り早い方法
最も手っ取り早い方法を以下に示します。 以下のサンプルプログラムはそれぞれ5つの成分を持つ配列xとyの値をCSV形式で書きだすものです。[ write-simple-csv.f90 ] - 手っ取り早くCSVファイルを書きだすサンプル
program writeSimpleCSV implicit none integer, parameter :: n = 5 integer i real :: x(n) = (/ 1.2, 0.02, 0.0003, 4.2, 5.99 /) real :: y(n) = (/ 9.0, 0.0008, 0.37, 100000.6, 500.2 /) open (18, file='mydata.csv', status='replace') do i = 1, n write (18, *) x(i), ',', y(i) end do close (18) end program writeSimpleCSVこのプログラムを実行するとmydata.csvというファイルに以下の内容が出力されます。
1.2000000 , 9.0000000 2.0000000E-02 , 7.9999998E-04 3.0000001E-04 , 0.3700000 4.1999998 , 1.0000060E+05 5.9899998 , 5.0020001E+02この出力はExcel等で読み込む事が可能です。 この方法は手っ取り早く出力する場合には十分ですが、 もしも余分な空白が気になるようであれば次セクションに示す方法で空白を除いた出力も可能です。
13.2 余分な空白を含まない方法
以下に余分な空白を出力したくない場合に利用可能なサンプルプログラムを示します。[ write-nospace-csv.f90 ] - 余分な空白を含まないCSVファイルを書きだすサンプル
program writeCSV implicit none integer, parameter :: n = 5 integer i character linebuf*256 real :: x(n) = (/ 1.2, 0.02, 0.0003, 4.2, 5.99 /) real :: y(n) = (/ 9.0, 0.0008, 0.37, 100000.6, 500.2 /) open (18, file='mydata.csv', status='replace') do i = 1, n write (linebuf, *) x(i), ',', y(i) ! 一旦内部ファイルへ書き出す call del_spaces(linebuf) ! 余分な空白を削除する write (18, '(a)') trim(linebuf) ! 出力する end do close (18) contains subroutine del_spaces(s) character (*), intent (inout) :: s character (len=len(s)) tmp integer i, j j = 1 do i = 1, len(s) if (s(i:i)==' ') cycle tmp(j:j) = s(i:i) j = j + 1 end do s = tmp(1:j-1) end subroutine del_spaces end program writeCSVこのプログラムは一旦内部ファイル(文字変数)に書き出しを行い、そこで余分な空白を取り除いた上で出力を行うと言う事を行なっています。
このプログラムを実行するとmydata.csvに以下のように余分な空白を除いた出力がなされます。
1.2000000,9.0000000 2.0000000E-02,7.9999998E-04 3.0000001E-04,0.3700000 4.1999998,1.0000060E+05 5.9899998,5.0020001E+02
前へ 上へ 次へ