プログラミングの備忘録

プログラムをつくる過程を残すもの

processingの備忘録 -txt、csvの生成-

こんにちは。
今回は「実行結果の保存 ~txt、csv編~」です。

「txt」はテキストファイルで、Windowsに搭載されている「メモ帳」で編集ができるファイルですので馴染みがあると思います。
csv」は「comma-separated values」の略で、これもテキストファイルですが「,」で文字を分けることができ、Excelで開くと「,」を境にセルを分けて表示してくれます。
その他、「タブ」で分けられた「tsv」(tab-separated values)や「スペース」で分けられた「ssv」(space-separated values)などもあるようです。


以下では、タイトルにあるように「txt」と「csv」についてのみ触れていきます。
保存方法は2つあります。

saveStrings()

1つ目は「saveStrings()」を使う方法です。
この方法では、保存したい文字列を配列で指定します。

String[] list = {"a", "b", "c", "d", "e"}; //文字列の指定
saveStrings("text.txt", list); //「text.txt」という名前で保存

/* 
実行すると、
a
b
c
d
e
という文字列が保存される
*/

この3つさえあれば保存は可能です。
ファイル名の指定部分"text.txt"を"text.csv"などに変えれば、他の拡張子でも保存できます。

createWriter()

2つ目は「createWriter()」を使う方法です。
この方法では、保存したい文字列をprint()で指定する形で保存します。

saveStrings()を使ったときと同じ文字列を保存するコードは以下のようになります。

PrintWriter file = createWriter("text.txt"); //「text.txt」の作成
file.print("a\n" + "b\n" + "c\n" + "d\n" + "e\n"); //文字列の指定
file.flush(); //指定した文字列を書き込む
file.close(); //ファイルを閉じる

「\n」は改行を意味しています。
こちらも先ほどと同様、ファイル名の指定部分"text.txt"を"text.csv"などに変えれば、他の拡張子でも保存できます。


個人的に扱いやすいのはこちらの方法で、コンソールに出力する感覚でテキストとして保存できるので便利です。
例えば以下のようにすれば、実行してから5秒間分のマウスの座標を保存することができます。

PrintWriter file;
float x, y;

void setup() {
    size(500, 500);
    file = createWriter("test.csv");
}

void draw() {
    x = mouseX;
    y = mouseY;
    
    file.println(x + "," + y);
    
    if(frameCount >= 5*60) {
        file.flush();
        file.close();
        exit();
    }
}

csvファイルであればExcelで開くことができるので、processingで描いた絵を他のソフトでも描画することができます。


pngやgifのときもそうでしたがファイルを上書きしていく形で保存します。そのため、過去の文字列を引き継ぎたいというときはファイル名を変えられるようにしたり、一度読み込んで文字列を取り込んでから新しい文字列を加えて書き直すといった方法をとると良いと思います。

まとめ

以前 (processingの備忘録 -png、gifの生成- - プログラミングの備忘録) の記事で画像が、今回の記事でテキストが保存できるようになりました。これで大抵の実行結果は出力することができます。

保存ができたら今度は読み込みもしたいというのが当然でてくるものだと思いますが、それはまた今度記事にしたいと思います。

追記 (2021/12/13)

さっそく作りました。

taq.hatenadiary.jp

以上

それでは、また次回。