プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
Processing、CSVファイルを読み込む(やり方その1)
CSVファイルを読み込んで中身を画面に表示してみます。
やり方はいくつかあるようですが、
今回は「loadStrings()」を使ったやり方をメモっておきます。

それでは早速……の前に事前準備としてCSVファイルを用意しておきましょうかね。

Processingのファイルが置いてある場所に「data」フォルダを作り
その中に文字エンコードの指定を「UTF-8」にした「piyo.csv」を置いておきます。
「piyo.csv」の中身は以下の通りです。

1,ピヨ太,男
2,ピヨ子,女
3,ピヨ太ママ,女

「UTF-8とか、よく分かんない」な人は以下のURLから
CSVファイルをダウンロードしてください。

http://i-3-i.info/test_blog/piyo.csv

準備ができたら、こんなサンプルプログラムを動かしてみましょうφ(--)

void setup(){
        background(255);
        size(800,400);
        
        String csvDataLine[] = loadStrings("piyo.csv");
        
        fill(0);
        
        //1行目
        text(csvDataLine[0], 10,20);
        
        //2行目
        text(csvDataLine[1], 10,40);
        
        //3行目
        text(csvDataLine[2], 10,60);
        
        noLoop();    //ループしない
}

void draw(){
}

ポイントは

csvDataLine = loadStrings("piyo.csv");

の部分です。

「loadStrings()」はファイルの文字列を読み込むときに使う関数です。
この行で「piyo.csv」の中身が全部読み込まれて
1行ごとに配列に入れられます。
具体的には以下のような状態になります。

csvDataLine[0]←「1,ピヨ太,男」(CSVファイルの1行目)
csvDataLine[1]←「2,ピヨ子,女」(CSVファイルの2行目)
csvDataLine[2]←「3,ピヨ太ママ,女」(CSVファイルの3行目)


さて、これでCSVファイルの中身が行ごとに配列に入りました。
CSVファイルの読み込み完了\(--)/

……で終わると石を投げつけられそうですね。
項目ごとにバラしてあげましょう。

それでは次に、こんなサンプルプログラムを動かしてみてくださいφ(--)

void setup(){
        background(255);
        size(800,400);
        
        String csvDataLine[] = loadStrings("piyo.csv");
        
        fill(0);
        
        //1行目
        text(csvDataLine[0], 10,20);
        
        //2行目
        text(csvDataLine[1], 10,40);
        
        //3行目
        text(csvDataLine[2], 10,60);
        
         //---------------------------------------

        //1行目(を項目ごとにバラしたもの)
        String [] csvDataColumn = split(csvDataLine[0],',');    //カンマでバラして配列に入れる
        text(csvDataColumn[0], 10,100);    //1つ目の項目を表示
        text(csvDataColumn[1], 50,100);    //2つ目の項目を表示
        text(csvDataColumn[2], 150,100);    //3つ目の項目を表示

        //2行目(を項目ごとにバラしたもの)
        csvDataColumn = split(csvDataLine[1],',');
        text(csvDataColumn[0], 10,120);
        text(csvDataColumn[1], 50,120);
        text(csvDataColumn[2], 150,120);

        //3行目(を項目ごとにバラしたもの)
        csvDataColumn = split(csvDataLine[2],',');
        text(csvDataColumn[0], 10,140);
        text(csvDataColumn[1], 50,140);
        text(csvDataColumn[2], 150,140);

        noLoop();    //ループしない
}

void draw(){
}

前半部分はさっきのと同じです。
ポイントは後半部分にある

String [] csvDataColumn = split(csvDataLine[0],',');

csvDataColumn = split(csvDataLine[1],',');

csvDataColumn = split(csvDataLine[2],',');

です。

「split()」は指定した文字を区切りとして項目をバラすときに使う関数です。

split(csvDataLine[0],',');

は「,(カンマ)」を目印にしてcsvDataLine[0]の中身をぶった切りなさいな指定です。
csvDataLine[0]の中身は「1,ピヨ太,男」でした。

1,ピヨ太,



1ピヨ太

と区切られ、配列csvDataColumn[]に

csvDataColumn[0]←「1」(csvDataLine[0]の1つ目の項目)
csvDataColumn[1]←「ピヨ太」(csvDataLine[0]の2つ目の項目)
csvDataColumn[2]←「男」(csvDataLine[0]の3つ目の項目)


のような形で入ります。

同じように

split(csvDataLine[1],',');

は「,(カンマ)」を目印にしてcsvDataLine[1]の中身をぶった切りなさいな指定です。

2,ピヨ子,



2|ピヨ子|女

と区切られ、配列csvDataColumn[]に

csvDataColumn[0]←「21」(csvDataLine[1]の1つ目の項目)
csvDataColumn[1]←「ピヨ子」(csvDataLine[1]の2つ目の項目)
csvDataColumn[2]←「女」(csvDataLine[1]の3つ目の項目)


のような形で入ります。

同じように

split(csvDataLine[2],',');

は「,(カンマ)」を目印にしてcsvDataLine[2]の中身をぶった切りなさい、な指定です。
以下、同じです。

ちなみに今回のサンプルは初心者向けにシンプルな書き方をしました。
実際にはfor文とかを使って、こんな感じの書き方になると思いますφ(--)

void setup(){
        background(255);
        size(800,400);
        
        fill(0);

        String csvDataLine[] = loadStrings("piyo.csv");    //CSVファイルを読み込む
        
        //項目ごとにバラす前
        for(int i = 0; i < csvDataLine.length; i++){
            text(csvDataLine[i], 10,20 + i * 20);    //表示
        }
        
        //項目ごとにバラしたあと
        for(int i = 0; i < csvDataLine.length; i++){
            String [] csvDataColumn = split(csvDataLine[i],',');    //項目をバラす

            for(int j = 0; j < csvDataColumn.length; j++){
                text(csvDataColumn[j], 10 + j * 50,100 + i * 20);    //表示
            }
        }

        noLoop();    //ループしない
}

void draw(){
}

あっ、そうそう。

大事な注意点として、このやり方はCSVファイルのデータ中に「,(カンマ)」があると使えません。
例えば

1,"ピヨピヨ,太郎","男"

のようなデータを処理すると

1|"ピヨピヨ太郎"|"男"

と切られてしまいます。

データ中に「,(カンマ)」があるCSVファイルを処理するときは
別のやり方にするか、データ中のカンマが区切り文字にならないようにする工夫をしてください。

とりあえず、そんな感じ\(--)/
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:Processing  thema:パソコンな日々 - genre:コンピュータ  Posted by ササキマコト 

  関連記事