Pear::Image_Graph その5

Image_Graph ロ-ソク足 CSV 読込ファイル作成

それでは引き続き、Image_Graph ロ-ソク足 CSV 読込ファイル p_gra-cand-2.php を作成します。
作成ファイル内容は、
63Pear Village に戻り
左サイドナビ「Pear::Image_Graph その5」の中の
Image_Graph ロ-ソク足 CSV 読込 PHP ファイル
から見てください。

Image_Graph ロ-ソク足 ファイルとの差分

Image_Graph ロ-ソク足ファイルでは表示データは
$Dataset[0] -> addt(1,27);
の様な形式で一つ一つ設定していました。
これでは、大変なので、CSV ファイルを読込んで、ロ-ソク足グラフの作成をします。
ここで、使用する
CSV ファイル p_gra5_samp.csv
はファイル名をクリックすると CSV ファイルを開いたり、保存したりすることができます。

CSV ファイルからグラフデータを読み込む

CSV ファイルからデータを読み込む方法は、
63Pear Village に戻り
左サイドナビ「Pear::Image_Graph その2」の中の
Image_Graph その2 グラフ値表示ファイル作成
と基本的には同じです。
最初に CSV ファイルを読み込みます。
$filepath = "file/p_gra5_samp.csv";
ファイルのあるフォルダ名とファイル名を設定します。
そしてインスタンスを定義します。
$file = new SplFileObject($filepath);
次ぎに、CSV 列として行を読み込みができるようにフラグをセットします。
$file -> setFlags(SplFileObject::READ_CSV);
これで指定した CSV ファイルからのデ-タが取得可能となります。
$file の中にはオブジェクトとして CSV ファイルからのデ-タが格納されますので ここから配列として読み出します。
foreach は、配列を反復処理するための便利な方法です。
foreach が使えるのは配列とオブジェクトだけであり、 別のデータ型や初期化前の変数に対して使うとエラーになります。
foreach ($file as $key => $line)
と書くと各反復において現在の要素の値が $line に代入され、 さらに現在の要素のキーを変数 $keyに代入します。
そして、 内部配列ポインタが一つ前に進められます。
よって、次の反復では次の要素を見ることになります。
もし、
foreach($line as $str)
と書くと各反復において現在の要素の値が $strに代入され、 内部配列ポインタが一つ前に進められます。

  foreach($file as $key => $line){
   foreach($line as $str){
    $records[$key][] = $str; 
   }
  }

具体的には $key は 0~1~2~3~ のように変化していきます。
例えば $key = 1 のとき
$records[$key][0] = 1
$records[$key][1] = 22
となります。

文字化け防止-必要なし

前項 CSV ファイルの読み込み過程で
$str1 = mb_convert_encoding
 ($str,"UTF-8","sjis-win");
なる命令は必要ありません。
必要なデ-タは全て半角数字だからです。
エクセルで CSV ファイルを作成すると文字コ-ドは SHIFT-JIS で保存されています。
正確に言うと sjis-win で保存されているようです。
でも、半角数字は SHIFT-JIS も UTF-8 も同じコ-ドなので、変換は必要ありません。

必要なデ-タを for 文で抜き取る

必要なグラフ値デ-タを読み出した CSV デ-タ $records[ ][ ] から抜き出します。
CSV デ-タの構成は、

CSV ファイル p_gra5_samp.csv

のようになっていますので、グラフを描くのに必要なデ-タは
[1][0] = 1 ~ [4][6] = 21 の 4×7 = 28個のデ-タ
であることがわかります。
よって、これらのデ-タを for 文で抜き出して
$Dataset[0]~[2]のデ-タオブジェクト
に入れます。
これをファイル化すると


  for($k1 = 1;$k1 < $last_l;$k1++){
   $Dataset[0]->addPoint(
    $records[$k1][0],$records[$k1][5]
    );
   $Dataset[1]->addPoint(
   $records[$k1][0],$records[$k1][6]
   );
  $Dataset[2]->addPoint(
   $records[$k1][0],
   array(
     'min' => $records[$k1][3],
     'open' =>$records[$k1][1],
     'close'=>$records[$k1][4],
     'max' => $records[$k1][2])
   );
  }

$last_l は何?

count($records)とすると
引数 $records に含まれる項目数を返します。
引数が配列でない場合には「1」の値を返します。
今回の場合 $records は2次元配列ですので、まずは、「1」としてカウントした後で、実際は配列ですので、 配列に含まれる個数 $records[0][]~$records[4][] すなわち「5」を加えるという挙動をします。
すなわち、
1 + 5 = 6
となります。
よって
$last_l = count($records) - 1;
とすると
$last_l = 5
となります。
よって $k1 は、1,2,3,4 と変化して終わります。

これで、Image_Graph ロ-ソク足 ファイル作成では直接行っていた表示デ-タの設定を CSV ファイルから読み込むよう変更することができました。
残りの部分は、保存するグラフのファイル名を
$filename = 'img/plot_cand-2.png';
に変更している部分を除き、
Image_Graph ロ-ソク足チャ-ト PHP ファイル p_gra-cand-1.php
と同じです。
これで、Image_Graph ロ-ソク足 ファイルとの差分説明は終わりです。

引き続き、作成したファイルの動作確認をしていきます。


Image_Graph ロ-ソク足 ファイル動作確認 に進む
Image_Graph ロ-ソク足 ファイル作成 に戻る

63Pear Villageに戻る