API > Textutils

「API/Textutils」の編集履歴(バックアップ)一覧に戻る

API/Textutils - (2013/02/26 (火) 21:29:13) のソース

このページでは Textutils API について解説する。

参考資料:
-[[Textutils API>http://computercraft.info/wiki/Textutils_%28API%29]]
執筆時のバージョン:
-ComputerCraft 1.5 for Minecraft 1.4.6 / 1.4.7

----
#contents
----

*Textutils API
文字列操作に関するちょっとした便利API。

**slowWrite
-textutils.slowWrite( &italic(){text}[, &italic(){rate}] )
-&italic(){text}(文字列)を一文字ずつ画面に表示する。表示速度は&italic(){rate}(数値)で指定する(省略時は20)
-戻り値:nil

カーソル位置から文字列を表示し始める。終了時のカーソル位置は最後の文字の次。
&italic(){rate}は一秒間に表示する文字数。

**slowPrint
-textutils.slowPrint( &italic(){text}[, &italic(){rate}] )
-&italic(){text}(文字列)を一文字ずつ画面に表示し、最後に改行する。表示速度は&italic(){rate}(数値)で指定する(省略時は20)
-戻り値:nil

カーソル位置から文字列を表示し始める。終了時のカーソル位置は最後の文字の次の行の先頭。
&italic(){rate}は一秒間に表示する文字数。

**formatTime
-textutils.formatTime( &italic(){time}[, &italic(){twentyFourHour}] )
-ゲーム内の時刻を表す実数値&italic(){time}(数値)を、時刻を表す文字列に変換する。&br()&italic(){twentyFourHour}(ブーリアン)が省略またはfalseのときは12時間表記、trueのときは24時間表記
-戻り値:文字列型。ゲーム内の時刻を表す文字列

&italic(){time}は[[os.time>API/OS#id_e29a4d45]]関数で得られる数値。

例:
 print( textutils.formatTime( os.time(), false ) )
ゲーム内時刻を12時間表記の文字列に変換し、表示する("5:30 AM"のように表示される)。

**tabulate
-textutils.tabulate( &italic(){...} )
-引数はテーブル型または[[Colors APIの色定数>API/Redstone & Colors#id_3d3f6f8b]](数値型)で、複数指定可能。&br()引数に指定したテーブル型の要素をタブ区切りで表示する。引数に複数のテーブルがある場合、行・列の幅は自動で調整される。&br()引数に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( &italic(){table}[, &italic(){...}] )
-textutils.tabulate()の表示内容が1画面分を超える長さのときに、1ページずつ表示するようにしたもの
-戻り値:nil

1ページ分表示すると画面下部に"Press any key to continue"と表示され、何かキーを押すと次のページが表示される。

**pagedPrint
-textutils.pagedPrint( &italic(){text}[, &italic(){lines}] )
-&italic(){text}(文字列)の表示行数が&italic(){lines}(数値、省略時は0)行を超えるとき、それ以降は1行ずつ表示するようにする
-戻り値:数値型。表示された行数(改行された数)

まず&italic(){text}が&italic(){lines}行を超えるまで表示され、それ以降は画面下部に"Press any key to continue"と表示されて、何かキーを押すごとに1行ずつ表示される。

**serialize
-textutils.serialize( &italic(){anything} )
-オブジェクト&italic(){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( &italic(){text} )
-textutils.serialize()で文字列&italic(){text}に変換したオブジェクトを復元する
-戻り値:テーブル型、あるいは数値型、文字列型、ブーリアン型、nil。復元されたオブジェクト

**urlEncode
-textutils.urlEncode( &italic(){text} )
-&italic(){text}をURLエンコードする
-戻り値:文字列型。URLエンコードされた&italic(){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()の&bold(){間違った用法}である。なぜなら、上記のように変換された文字列(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