FC2ブログ
2008
11.07

今日のLua 標準入力をほげほげ

Category: lua   Tags:luaプログラミング
CGIを書くには、標準入力からの値の取得は必須なので、
色々やってみました。

標準入力からの値を取得するには

$ lua -e 'print(io.read("*a"))' < なんかファイルとか



io.read() では、どのように読み込むかのフォーマットを指定できます。

マニュアルによれば


"*n" は数値を読み込む。これは文字列の変わりに数値を読み込む唯一の書式である。
"*a" は現在の位置から、残りのファイル全体を読み込む。ファイルの終わりでは、空文字列を返す。
"*l" は次の行を読み込む (行末文字は飛ばす)。ファイルの終わりでは nil を返す。これはデフォルトの書式である。
数値 はその文字数からなる文字列を読み込む。ファイルの終わりでは空文字列を返す。数値がゼロの場合は、何も読み込まず、空文字列を返す。ファイルの終わりでは nil を返す。



では、中身が

a
1
23
456
7890
aaa
aa



という中身のファイル aaa を作って実験してみます。

$ lua -e 'print(io.read("*l"))' < aaaa
a


次の行なので、1行目が出力されます。デフォルト。

$ lua -e 'print(io.read("*n"))' < aaaa
nil


数値ではないから、nil?

$ lua -e 'print(io.read(1))' < aaaa
a


1文字だけ読み込みます。改行も文字数として解釈されている模様。

$ lua -e 'print(io.read(2))' < aaaa
a


$ lua -e 'print(io.read(3))' < aaaa
a
1



では、マルチバイトはどうなるかやってみましょう。


いう
えおか


って中身のファイル bbbb を作りました。

$ lua -e 'print(io.read(1))' < bbbb


!!!!

lua -e 'print(io.read(2))' < bbbb


$ lua -e 'print(io.read(3))' < bbbb


文字数ではなくて、バイト数ってのが正しそうですね。。


ちなみに、ファイル名を指定してあげたい場合は
io.open("ファイル名"):read("*a")
とかしてあげるといいです。

スポンサーサイト




トラックバックURL
http://noriko3.blog42.fc2.com/tb.php/130-aecc9ab7
トラックバック
コメント
管理者にだけ表示を許可する
 
back-to-top