ZawaWorks’s diary

ProcessingやNode.jsなどプログラミング技術の話をします。

Processing:絶対パスを返してくれるsketchPath()

はじめに

 ProcessingでTwitter botに画像をツイートさせようとしたら、「画像の相対パスではなく絶対パスを送ってくれないとダメです!」と言われてしまいました。そのときはその画像があるフォルダーまで「C:\Users\Documents\・・・\image.png」と書いきましたが、毎回これをやるのはだるいですよね。それで今回はその問題を解決してくれる「sketchPath()」と「dataPath()」について紹介しようと思います。

 

sketchPath()とdataPath()

 百聞は一見に如かず、まずは下のコードと出力データをご覧ください。

f:id:ZawaWorks:20171008214633p:plain

 

 なんとなくわかった方もいると思いますが、詳しく説明していきます。


フォルダやファイルの構成

フォルダとファイルは下のような構成になっています。

f:id:ZawaWorks:20171008211353j:plain

sketchPath()

 sketchPath()は実行するpdeファイルが入っているフォルダーの絶対パスを返してくれる命令です。今回の場合は「C:\Users\Documents\path_search」を返してくれます。

 またそのフォルダー内のフォルダやファイルを参照するときは「sketchPath("image1.png")」や「sketchPath("data/image2.png")」と書きます。

 まとめるとこんな感じです。

f:id:ZawaWorks:20171008213220p:plain

dataPath()

 次にdataPath()についてです。dataPath()は実行するpdeファイルと同じフォルダーの中にあるdataフォルダー絶対パスを返してくれます。今回の場合は「C:\Users\Documents\path_search\data」を返してくれます。

 つまり、先ほどの 「sketchPath("data/image2.png")」は「dataPath("image2.png")」と書き換えることが可能です。

 ここで注意なのですがsketchPath()の場合は「sketchPath()」と書くだけで絶対パスを返してくれましたが、dataPath()の場合はカッコの中にString型を入れなければいけません。「C:\Users\Documents\path_search\data」と返してほしいときは「dataPath("")」と書きしょう。

 まとめるとこんな感じです。

f:id:ZawaWorks:20171008213115p:plain

 

おわりに

 今までProcessingで絶対パスが指定できないイライラがこれで解消できました!

 便利な命令ですので、ぜひ使っていきましょう。

 

参考資料

forum.processing.org