Tableを使ったcsv読み込み。Processing

csv読み込み

外部のデータをprocessingに読み込ませるとなった時、一番扱いやすいフォーマットは何かと言われたら自分はcsvかなぁと思ったので、processingにcsvを読み込ませたい。

Tableクラス

Tableクラスは行と列でできたマトリックスにデータを格納するものだ。processingは単純な文字列のtxtファイルのほかにも、XMLjsonファイルも扱うことができるが、ちょっと自分ではそこら辺の知識は今は無いので気が向いたらそこも勉強しようと思う。

今回は単純に、媒介変数表示の

時間t,x座標,y座標

からなるcsvファイルを読み込むような形で実装したい。

コード

Table txy;
int index=0;

void setup(){
  size(100,100);
  background(255);
  txy=loadTable("Book1.csv","csv");
  
  frameRate(1/(txy.getFloat(1,0)-txy.getFloat(0,0)));
}

void draw(){
  if(index<txy.getRowCount()){
    float x=txy.getFloat(index,1);
    float y=txy.getFloat(index,2);
    point(x,y);
    println(x+","+y);
    index++;
  }
}

Table を宣言して、loadTableで読み込んでいる。ここは、loadTable("ファイル名","拡張子名");と使う。

今回はcsvを読み込みたいので"csv"とした。もし、タブで区切られていたら、tsvとする。 今回読み込んだファイルはExcelで作った以下のようなファイルである。

0    0   1
0.01    -0.0199 1.0001
0.02    -0.0396 1.0004
0.03    -0.0591 1.0009
0.04    -0.0784 1.0016
0.05    -0.0975 1.0025
0.06    -0.1164 1.0036
0.07    -0.1351 1.0049
0.08    -0.1536 1.0064
0.09    -0.1719 1.0081
0.1 -0.19   1.01
0.11    -0.2079 1.0121
....もっと続く。。

(実際はコンマ区切り) である。

呼び出すときには、txy.getFloat(COLUMS,ROWS);でテーブルの行列から出すことができる。

COLUMSは行(左右)、ROWSは列(上下)を指すintである。 リファレンスは以下のurl。もっとほかの型のTableを使ったり、削除、挿入もできるらしいので、参照してね。 processing.org