このページでは Textutils API について解説する。
参考資料:
執筆時のバージョン:
- ComputerCraft 1.5 for Minecraft 1.4.6 / 1.4.7
Textutils API
文字列操作に関するちょっとした便利API。
slowWrite
- textutils.slowWrite( text[, rate] )
- text(文字列)を一文字ずつ画面に表示する。表示速度はrate(数値)で指定する(省略時は20)
- 戻り値:nil
カーソル位置から文字列を表示し始める。終了時のカーソル位置は最後の文字の次。
rateは一秒間に表示する文字数。
slowPrint
- textutils.slowPrint( text[, rate] )
- text(文字列)を一文字ずつ画面に表示し、最後に改行する。表示速度はrate(数値)で指定する(省略時は20)
- 戻り値:nil
カーソル位置から文字列を表示し始める。終了時のカーソル位置は最後の文字の次の行の先頭。
rateは一秒間に表示する文字数。
formatTime
- textutils.formatTime( time[, twentyFourHour] )
- ゲーム内の時刻を表す実数値time(数値)を、時刻を表す文字列に変換する。
twentyFourHour(ブーリアン)が省略またはfalseのときは12時間表記、trueのときは24時間表記
- 戻り値:文字列型。ゲーム内の時刻を表す文字列
例:
print( textutils.formatTime( os.time(), false ) )
ゲーム内時刻を12時間表記の文字列に変換し、表示する("5:30 AM"のように表示される)。
tabulate
- textutils.tabulate( ... )
- 引数はテーブル型またはColors APIの色定数(数値型)で、複数指定可能。
引数に指定したテーブル型の要素をタブ区切りで表示する。引数に複数のテーブルがある場合、行・列の幅は自動で調整される。
引数にColors APIの色定数を指定すると、それ以降に表示されるの文字の色を変更することができる(カラー表示が可能な環境のみ)
- 戻り値:nil
引数に指定可能なテーブルは、要素が文字列型または数値型、nilのみで構成されているもの。それ以外の型(ブーリアン、テーブル、関数など)を要素に含む場合はエラーになる。
要素にnilが含まれる場合、そのテーブル内のnil以降の要素は表示されない。
カラー表示ができない環境で文字色を変更しようとするとエラーになる。
この関数中で変更した文字色は関数以降も継続する。
例:
textutils.tabulate( {1,2,3}, {"A","B","C"} )
2つのテーブルを成形して表示する。
画面には以下のように出力される。
1.0 2.0 3.0
A B C
pagedTabulate
- textutils.pagedTabulate( table[, ...] )
- textutils.tabulate()の表示内容が1画面分を超える長さのときに、1ページずつ表示するようにしたもの
- 戻り値:nil
1ページ分表示すると画面下部に"Press any key to continue"と表示され、何かキーを押すと次のページが表示される。
pagedPrint
- textutils.pagedPrint( text[, lines] )
- text(文字列)の表示行数がlines(数値、省略時は0)行を超えるとき、それ以降は1行ずつ表示するようにする
- 戻り値:数値型。表示された行数(改行された数)
まずtextがlines行を超えるまで表示され、それ以降は画面下部に"Press any key to continue"と表示されて、何かキーを押すごとに1行ずつ表示される。
serialize
- textutils.serialize( anything )
- オブジェクトanything(テーブルまたは文字列、数値、ブーリアン、nil)を文字列に変換する
- 戻り値:文字列型。オブジェクトを表す文字列
テーブルや数値、ブーリアン型を文字列型に変換することにより、それをRednetで送信したり、テキスト形式で保存したりできるようになる。文字列型に変換したオブジェクトは、textutils.unserialize()によって復元することができる。
変換できるのは、要素が「テーブルまたは文字列、数値、ブーリアン、nil」のみで構成されたテーブル、または文字列、数値、ブーリアン、nilである。それ以外の型(関数など)が含まれる場合はエラーになる。また、テーブルの要素に自己参照となるテーブルが存在する場合もエラーとなる。
例:
myThing = { name = "Test", n = 2 }
sThing = textutils.serialize( myThing )
rednet.send( receiverID, sThing ) -- 既にRednetがopenされていて、receiverIDには相手のIDが代入されているものとする。
myCopy = textutils.unserialize( sThing )
print( myCopy.name )
テーブルを文字列に変換した後Rednetで送信し、それを復元して要素の1つ(name)を表示する("Test"と表示される)。
unserialize
- textutils.unserialize( text )
- textutils.serialize()で文字列textに変換したオブジェクトを復元する
- 戻り値:テーブル型、あるいは数値型、文字列型、ブーリアン型、nil。復元されたオブジェクト
urlEncode
- textutils.urlEncode( text )
- textをURLエンコードする
- 戻り値:文字列型。URLエンコードされたtext
文字列中の記号をパーセントエンコーディングする(%+16進数の形)。ただし、改行は"%0D%0A"に、半角スペースは"+"に変換される。
URLに付加するデータ部分のエンコードに使えるが、URLそのものには使えない(":"や"/"もパーセントエンコーディングされてしまうため)。
例:
sUnsafe = "http://computercraft.info/wiki/index.php?title=Textutils_(API)"
sSafe = textutils.urlEncode( sUnsafe )
print( sSafe )
文字列をURLエンコードして表示する。画面には以下のように表示される。
http%3A%2F%2Fcomputercraft%2Einfo%2Fwiki%2Findex%2Ephp%3Ftitle%3DTextutils%5F%28API%29
この例はtextutils.urlEncode()の間違った用法である。なぜなら、上記のように変換された文字列(sSafe)はもはやURLとして使えないからである。
正しくは以下の例のように使う。
例:
sUnsafe = "Textutils_(API)"
sBaseURL = "http://computercraft.info/wiki/index.php?title="
sSafe = textutils.urlEncode( sUnsafe )
sURL = sBaseURL .. sSafe
print( sURL )
データの文字列をURLエンコードしてURLの文字列に付加し、それを表示する。画面には以下のように表示される。
http://computercraft.info/wiki/index.php?title=Textutils%5F%28API%29
最終更新:2013年02月26日 21:29