Fortran Tip集

前へ   上へ   次へ

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



前へ   上へ   次へ
関連情報
ご案内
© 日本ニューメリカルアルゴリズムズグループ株式会社 2025
Privacy Policy  /  Trademarks