見出し画像

Rustでマイクラのmcfunctionファイルを書き出してみた

マイクラでゲームを作ることが増えて
場合によってはたくさんのmcfunctionファイルを
作らなければならないこともあります。
それぞれ内容が違うものを作る場合は
手動で書くしかないのですが、
一部分だけ違ってほかは同じ場合は
プログラムで自動書き出しをして楽をしたいなぁと……。

過去にPythonやC#を使って作った
とあるmcfunctionを書き出すツールを、
最近話題のRustを使ってもう一度作っているとき
とある部分で引っかかって苦悩した内容です。

テキスト書き出しで「{」「}」はどうするんじゃ?

Rustでテキスト書き出しをするときは
「File」とか「OpenOption」とかを使用するのですが、
今回は「File.create」を使ってmcfunctionファイルを作成することにしました。

また、
書き出しは「write!」を使用するのですが……
この時「{」「}」はどうやって書き出せばいいんだろうかと
あれこれ悩みました。

エスケープシーケンスを使えばいいんじゃね?

C#とかでは「"」の記入にエスケープシーケンスこと
バックスラッシュを使って記入するので、
そのノリで行けないかとやってみたところ

だめでした

「"」は行けるみたいです。
そこは行けるのに「{」は行けんのかい。

raw string使えばいいじゃん?

いろいろ調べているとraw string使えるよ!みたいな記事があったので
それで試してみることにしたのですが、
ここにも落とし穴が……

「{」と「}」はプレースホルダーとしても使用したいため
それを区別する方法が必要なのです。
raw stringを使用してしまうと
「{」「}」は文字列リテラルとして認識されて
プレースホルダーとしての役割がなくなってしまいます。
もしかして何か方法がある……かも?
おしえてくわしいひと……

ASCII符号とかUnicode符号とか使えばいいのでは?

さっきの記事にもありました。
ソレダ!
と思って入力したところ

だめでした

ちなみにUnicodeの方もだめでした。
なんでぇ……何がきにいらんのぉ……

最終的に……

力技でやってくれるわ!!!

Unicode符号を変数にぶち込んで
それをプレースホルダーで使うという力業でやりました。

通るんかい……。
しかもちゃんと書き出せるし……。


この記事が気に入ったらサポートをしてみませんか?