--- Lua言語の手引き --- draft 2010 March
ftp://ftp.tecgraf.puc-rio.br/pub/lua/nocoes-3.1.pdf
http://www.tecgraf.puc-rio.br/lua/ftp/nocoes-3.1.pdf
Luaはフリーソフトウエアとして配布されているプログラミング言語ですが、 TeCGrafが著作権を保持しています。
ftp://ftp.tecgraf.puc-rio.br/pub/lua/lua-3.1.tar.gz
http://www.tecgraf.puc-rio.br/lua/
Copyright (c) 1994-1998 TeCGraf, PUC-Rio. Written by Waldemar Celes Filho, Roberto Ierusalimschy, Luiz Henrique de Figueiredo. All rights reserved.
Lua言語のインタプリタは、一つの実行環境に複数のプログラムを読み込むことができ、それぞれのプログラムは、読み込まれた順に翻訳され、それぞ れの命令文が実行されます。そして、関数定義の中にある命令文は翻訳されたあと、関数のコードとして登録されます。また、大域変数や関数の登録されている実行環境は、インタプリタを動作させたときに作られ、利用を終了するまで有効で、それらの関数やデータは、Lua言語のプログラムやC 言語とのインターフェイ スのライブラリで、操作できます。
Lua言語の処理系では、実行単位のプログラムをチャンクと呼びますが、それ を仮想マシンの実行コードに翻訳し、その後仮想マシンによってコードを実行 します。登録されている関数のコードは、関数が呼び出された時に高速に実行されます。これは、コンパイラとインタプリタを融合した方式で、 プログラムを逐次翻訳することで実行速度を低下させることなく、イン タプリタの使いやすい環境を保っています。
a = 2.3そして次の例では変数aで文字列データを参照するように変更します。
\n 改行 \t 水平タブ \r 復帰 \v 垂直タブ \xxx 文字コードが 10 進数 xxx の文字 \a ベル \b 一文字後退 \f フォームフィード \\ バックスラッシュ \" 二重引用符 (") \' 一重引用符 (') \\ バックスラッシュ(\)二重引用符で囲まれた文字列中では、一重引用符をエスケープ無 しでそのまま用いることができます。しかし、ある文字列を囲むのに用いられ ている引用符合をその文字列中で用いるときには、エスケープする必要があり ます。次の二つは文字列として有効であり、同一の文字列です。
s = "Olho d'agua" s = 'Olho d\'agua'二重の角括弧も文字列を囲むのに用いられます。二重引用符や一重引用符と異 なり、この中ではエスケープシーケンスが解釈されません。また、それが入れ子になる場合は、角括弧の間に=を入れて、[=[ ]=] のように明示します。 例:
s = [[ This is a text that crosses a string more than and contains one string nested: [=[nested]=] in the end!]]
function func1 (...) ... endこれは次のような関数呼び出しを行うことで実行できます。
func1(...)
a = {}このテーブルに後からフィールドを追加することも可能です。 テーブルに関しては7節で詳述します。
s, v = "Language Lua", 2この例は、変数sに "Language Lua" という文字列を代入し、変数vに 2 という数値を代入します。
また、左辺の変数の数が右辺の値の数と異なることもあります。その場合には 左辺の変数に nil が入れられるか、右辺の値が捨てられます。
a, b = 2 c, d = 2, 4, 6この例では a に 2、 b に nil が代入されます。 また c には 2、 d には 4 が代入され、6 という値は捨てられます。多重代入を利用することで、変数の値の交換を1つの命令で書くことがで きます。
a, b = b, aこの例では a が持っていた値が b に、 b が持っていた値 が a に代入されます。よって、一時的な変数を用意する必要はありません。 (脚注2: この振舞いはタグ関数を用いることで変えることができる。 Lua 参照マニュアルを参照。)
a = 2 * 3.4 b = (a + 1) / 3.4 c = 2 * (-3)算術演算子は数値型の値にのみ使用できます(数値型に変換可能な文字列に対しても可能です。"自動的な変換" の節を参照)。演算子 ^ は通常は巾乗で、Lua 言語の数学関数ライブラリが使われます。この2項演算子 ^ は高い優先順位で処理されますが、内部的には、タグ関数を使って実装されています(Lua 参照マニュアル参照)。
< 小さい > 大きい <= 小さいか等しい >= 大きいか等しい == 等しい ~= 異なる関係演算子は、結果が偽の時 nil を返し、真の時 1 を返します。
a = 4 < 3 b = 4 > 3この例では a に nil が代入され、 b に 1 が代入されま す。演算子 >,<,>=,<= は数値型または文字列型の値で使用でき、真偽の判断を行います。 そして、それはタグ関数を使うことで変更できます (Lua 参照マニュアルを参照)。 等価演算子 (==) は、はじめに比較される値の型が等しいかを調べ、 異なる場合には nil を返します。型が同じ場合には、値が等しいか を調べます。 数値や文字列の等しさは通常の基準で判断されます。 テーブル、関数、ユーザデータは参照が比較されます。 例えば2つのテーブルの場合、その2つのテーブルが同一の対象であ るかどうかで判断されるので、同じ要素を持っているかどうかでは判断されません。 非等価演算子 (~=) は等価演算子の逆です。
and かつ or または not でないand や or が複数ある場合には、左から右に評価されるので、全ての演算が評価される前に、式の値が決まってしまうことがあります。
a = 23 b = 15 c = a < 20 or b > a d = a < 20 and b > aこの例では、 c と d は nil になります。 d の場合、まず a<20 が偽となり、論理演算子 and によって結合されているので、b>a を評価する必要はなく、この式に偽になります。
a = "Language" b = "Lua" c = a .. " " .. bこの例では a の値に1文字空白が続き、b の値がつながったもの、つまり "Language Lua" という文字列が変数 c に代入され ます。
b = "53" c = 2 + bこの例では文字列 "53" は演算の前に数値に変換され、 c には 55 が 代入されます(変数 b は文字列型の値を持ったままです)。 他方で、文字列が必要な文脈で数値を使った場合には(連結演算子など)、 数値は対応する文字列に変換されます。 数値が完全なものであれば、小数や指数は点なしの文字列になります。 数値が分数を含む場合には、小数や指数を含むことがあります(脚注3)。 例えば、
print("result: " .. 23)は次のように出力されます。
result: 23.tonumber というLua言語の標準関数は、可能な場合は文字列を数値型に変換します。数値を文字列に変換するには、 必要に応じて tostring 関数を使うことができます(9参照、 sprintf で %.16g の書式で変換します)。 複数の演算子が使われている場合は優先順位があり、次の順に演算されます。また括弧を用いて演算順序を変えるこ とができます。
^ not -(単項) * / + -.. < > <= ~= == and or
条件文 ( if )Lua の基本的な条件文は if です。 if 文の形式は次のようにな ります。
if exp then ブロック endまたは、
if exp thenまたは、
ブロック1
else
ブロック2
end
if exp1 then ブロック1 elseif exp2 then ブロック2 ... elseif expN then ブロック N else ブロック N+1 endはじめの形式では、式 exp が nil でない値の場合にブロックが実行されま す。2番目の形式では、式 exp が nil の場合にブロック 2 が実行され、 そうでなければブロック 1 が実行されます。 3番目の形式では、多くの条件にもとづいてif-then-elseif-then- ... -else-end で条件判断する列を示しました。 上記の例では、式 exp1 が真ならば( nil で無いならば)ブロック 1 が実行 され、式 exp2 が真ならばブロック 2 が実行され、全ての式が偽ならば ( nil と等しいならば) ブロックN+1 が実行されます。
for i=1,n do ブロック end変数 iは新しく作成され、1、からnまで1ずつ増分します。増分を変更したり、初期値を変更する場合の一般的な形式は次のようになります。
for i=s,n,d do ブロック end例として、nの階乗を計算するプログラムは次のようになります。
f = 1 ---- 0の階乗 for i =1,n do f = f * i endここで使う繰り返し数の変数は、繰り返しブロックの中だけで有効なことに注意してください。後に述べるローカル変数です。endの後で参照しても繰り返しの最大数は入っていません。
while expr do ブロック end式 expr が真である間( nil でない間)、ブロック内の命令が実行 されます。例として、変数 n の階乗を計算する次のプログラムを 示します。
f = 1 ---- 0 の階乗 i = n ----- 繰り返しを制御する変数 while i > 0 do f = f * i i = i - 1 end繰り返しを実行し終えた後には、 f は n の階乗の値を持ち、 i は 0 になります(繰り返しの終了条件)。
repeat ブロック until exprrepeat では、ブロック内の命令は最低でも1回実行されます (繰り返しを実行するかどうかの判断は繰り返しの最後でしか行われません)。 また式 expr が真である間、繰り返されます。 上記と同じ階乗の計算を行うプログラムは次のようになります。
f = 1 --- 1の階乗 i = 1 --- 繰り返しの制御変数 repeat f = f * i i = i + 1 until i > n
for i ,data in iterator() do ブロック enditerator() に関数を指定します。例として、イテレータ関数pairs()を使って後に述べるデータ構造としてのテーブルの内容を順番にすべて取り出すことができます。
for key,value in pairs(table) do print(key,value) endこの構文は複雑なデータ構造にうまく対処できるものです。
while true do if(expr) then break end endもしどのような条件でもbreakをさせたいときは
do break endのようにしてbreakだけのブロックを指定します。
a = 2 --- 大域変数に2を代入1つの命令で複数の局所変数を宣言して初期化することもできます。
if a > 0 then
local b=a --- a の値(2)を初期値として局所変数 b を宣言
a=a+1 --- 大域変数 a に 1 を加える
local a=b --- b の値を初期値として局所変数 a を宣言
print(a) --- 局所変数 a の値(2)を表示 end --- 局所変数 a, b の有効範囲はここまで
print(a) --- 大域変数 a の値(3)を表示
local a, b, c = 2, 5+6, -3この例では、 a は 2 を初期値とし、 b は 11 を、 c は -3 をそれぞれ初期値としています。初期化されない局所変数の値は nil とな ります。
function name ([ 引数のリスト ]) 命令のブロック endここで name は関数が代入される大域変数の名前です。引数のリストは 関数内の局所変数と同様に扱われ、関数呼び出しの時の引数で初期化されます。 関数呼び出しの一般的な形式は次のようになります。
name ([ 引数のリスト ])関数名の後に括弧で囲まれた0個以上の引数のリストを続けて書きます。 name が関数を値として持たない場合(関数型の値では無い場合)には 実行時エラーになります(タグ関数参照)。引数が指定された場合には、 まず引数は関数呼び出しの前に評価されます。次に関数定義に指定された仮引 数と、関数呼び出しに指定された実引数との間で対応が取られます (この時に多重代入と同様な調整が行われて対応が決まります)。
return [ 式のリスト ]構文規則上、 return 命令はブロックの最後でなければなりません。 このことにより、 return 命令の後に置かれて決して実行されない 隠れた命令を防ぐことができます。 return 文がブロックの最後でない場合には、文法エラーになります。
function translate (x, y, dx, dy) return x+dx, y+dy end次のように関数呼び出しが行われたとすると、
a,b = translate(20, 30, 1, 2)a には 21 (=20+1) が代入され、 b には 32 (=30+2) が代入されます。 次のような関数呼び出しの場合には、
a = translate(20, 30, 1, 2)関数の(2つ目の)戻り値は捨てられ、21 を受け取ります。次のような呼び出 しの場合には、
a, b, c = translate(20, 30, 1,2)a には 21 が代入され、 b には 32 が代入され、 c には nil が代入されます。
複数の値を返す関数呼び出しは値のリストと同一に扱われるわけではありませ ん。多重代入で調整が行われる時には、1つ目の戻り値だけが考慮されます。 例として、少しに異なる2つの例を挙げます。はじめに、次の関数呼び出しの 場合には、
a, b, c = 10, translate(20, 30, 1, 2)a には 10 が代入され、 b には 21 が代入され、 c には 32 が代入されます。 このように関数呼び出しがリストの最後の場合には、関数呼び出しが1つずら されます。しかし、次の呼び出しでは、
a, b, c = translate(20, 30, 1, 2), 10驚くかもしれませんが、関数が返す値の個数によらず1つ目の返り値だけが 扱われ(この場合21)、もう1つの返り値の 32 は捨てられます。よって、 a には 21 が代入され、b には 10 が代入され、cにはnilが代入されます。
Lua では可変個の引数を受け取る関数を定義することができ、これは関数 定義の引数リストの最後にピリオドを3つ ( ...) つけることで表せます。この形式の関数では実引数と仮引数の対応づけだけで調整は行われません。関数の中では、3つのピリオドをローカル変数に代入すれば、 引数リストに指定されたものを参照することができます。あるいは、関数の引数としてそのまま渡すこともできます。例として、2つの異なる関数定義をします。
function f(a, b) end function g(a, b, ...) endこれらの関数呼び出しでは、実引数と仮引数との間で次のような対応づけが行なわれています。
実引数 仮引数 f(3) a=3, b=nil f(3, 4) a=3, b=4 f(3, 4, 5) a=3, b=4 g(3) a=3, b=nil, arg={ n=0 } g(3, 4) a=3, b=4, arg={ n=0 } g(3, 4, 5, 8) a=3, b=4, arg={ 5,8; n=2 }
t[1] = 13 t[45]=56テーブルのインデクスの値に上限はなく、テーブルの次元は必要に応じ て自動的に変更されます。また、次のように書くこともできます。
t["name"] = t[1] + 2name という文字列のインデクスに対応するテーブル中の値として、 インデクス 1に対応する値(ここでは 13)に 2 を加えた値を代入します。よっ てインデクス"name" に対応する値は 15 になります。 また以下のように書くこともできます。
t[t] = 5これは t というテーブル型のインデクスに対応する値として 5 を代入し ています。テーブル t はインデクスとして有効な値です (一見混乱しているように見えますが、やっていることは間違っていません)。
また文字列をインデクスにするときには、ピリオドを使った記法を用いること ができます。例えば、
t["version"]=4これは以下と等価です。
t.version = 4この記法の方が判りやすくなります。 ただし、文字列がスペースを含むときはピリオドを使った表記を用いることはできません。
例: t["Rio De Janeiro "]=1994数値と同様に、任意の型の値をテーブルに代入することができます。 次に示すのは、テーブルt への正しい代入の例です。
t[10] = "example" t[2.34] = 12 t.tabela, t[0] = 3, 12 t[-234] = 0 a = "Lua" t[a] = 5最後の例は注意深く見る必要があります。 a は "Lua" という値を 持つ変数と考えると、これは Lua というインデクスに対応する値として5 を代入していることになります。 しかし、t.a はt["a"] と 等価ですが、t[a] とは異なります。 ここでは t[a] と t.Lua が等価にになります。
インデクスに対応する値を一度も与えられていない(初期化されていない)テー ブル中の値は nil になります。したがって上の例の代入だけを行った とすると、
print(t[999])999 というインデクスに対応する値は初期化されていないため、この命令は nil を出力します。
テーブル中に他のテーブルを代入することもできるので、多次元配列が実現で きます。例えば、次のようになります。
m = { } m[1] = { } m[2] = { } m[1][1] = 1.0 m[2][1] = 0.0また次のように書くこともできます。
s = { } s.dist = { } s.dist.name = "Language Lua" s.dist.version = 4
{ 式1, 式2, ...., 式N }このようにテーブルを作成する { } の間に式のリストを書きま す。リストの要素はそれぞれ評価され、1番目の値はインデクス 1 に対応づ けられ、2番目の値はインデクス 2 に、というぐあいになります。 したがって次の例は、
t = {23, 45, -7, "Lua", 6+4}以下と等価です。
t = { } t[1] = 23 t[2] = 45 t[3] = -7 t[4] = "Lua" t[5] = 6+4初期化を行った後でも、テーブルに他の値を代入することはできます。 テーブルにはいつでも nil 以外の任意のインデクスに対応して任意の 値を代入することができます。例えば初期化の後に、次のような命令を実行す ることができます。
t[67] = 0 t["Lua"] = "example"
{ [ 式A ] = 式1, [ 式B ] = 式2... }初期化の際に、インデクスと値の対であるフィールドを指定することができる。 テーブルのインデクスが文字列の場合は、次のように単純化することができます。
string1 = expr1よって次の例は、
t={ name="Language Lua ", [1]=3.0, [f(x)]=g(y) }以下と等価です。
t={} t.name=" Language Lua " t[1]=3.0 t.[f(x)]=g(y)同様に、テーブルにはいつでも nil 以外の任意のインデクスに対応し て任意の値を代入することができます。例えば初期化の後に、次のようにする ことができます。
t["Lua"]=" example "
table={ 式のリスト , フィールドのリスト }フィールドのリストと式のリストを区別するためにセミコロンで分けていることもあります。これは、バージョン4までの制約だったからで、バージョン5では必要ありませんが、習慣的にそう書かれていることがあります。次の例は、
t = { nome = "Linguagem Lua", [1] = 3.0, [f(x)] = g(y) } t = {23, 45, -7 , nome="Linguagem Lua", versao=3.0, [4]=80 }以下と等価です。
t = { } t[1] = 23 t[2] = 45 t[3] = -7 t.nome = "Linguagem Lua" t.versao = 3.0 t[4] = 80
dostring("bib.lua") then if not f then print("It is not possible to open the library of functions") end
i = 1; botao = {} f = loadstring("return botao"..i ) b=f() while b do botao[i] = b i = i + 1 f = dostring("return botao"..i ) b=f() end
field,value = next(t, nil) --テーブルの最初の要素 while field do --存在するまで
print(field, "=", value) --内容を出力
field,value = next(t, field) --次の要素end
name,value = nextvar(nil) --先頭にある大域変数
while name do --nameが存在すれば
print(name, "=", value) --その内容を表示
name,value = nextvar(name) --次の大域変数 end
(例) print(tonumber("34.56 "), tonumber("3.2 X"), tonumber(2)) (結果) 34.56 nil 2
(例) print(tostring(3.2), tostring({10,20,30}), tostring(print)) (結果) 3.2 table: 0x324a43 function: 0x63ed21
(例) print( 2*3+2 )print( "valor = ", valor )
a,b=pcall( patm.sin, 1.0 ) --- b = 0.841709848079 a,b = call( math.max, 1,4,5) --- b = 4 a,b=pcall(math.sin,"@") print(a,b) false bad argument #1 to '?' (number expected, got string)
string.find( str, pattern [, init [, plain ]] )文字列strの中に、patternで指定した文字列を探し、初めの場所と終わりの場所の2つの数値が戻り値になります。initで検索を始める最初の場所を指定できます。また、plainでnil以外だった場合は、パターンマッチングの機能を使わずに単純な文字列比較を行います。文字列が見つからなかった場合はnilが戻り値となります。パターンマッチにキャプチャを使った場合は、キャプチャに対応する文字列が戻り値に追加されます。
i, f = string.find("Linguagem Lua 3.0", "Lua") print( i, f ) (結果) 11 13 (例) data = "13/4/1997" i, f, day, month, year = string.find(data, "(%d*)/(%d*)/(%d*)") print( day,month, year ) (結果) 13, 4, 1997
x (x が ^$()%.[]*+-? のどの文字でもない場合) 文字 x そのものを表します。 %x xはアルファベットや数字以外の記号で、その記号自体を表します。特殊文字を表すのに使います。 . すべての文字 %a アルファベット文字 %A アルファベット文字以外 %d 数値(10進数) %D 数値以外 %l アルファベット小文字 %L アルファベット小文字以外 %s 空白文字(スペース、タブ、quebras de linha) %S 空白文字以外 %u アルファベット大文字 %U アルファベット大文字以外 %w 文字と数字 %W 文字と数字以外 [文字パターン列] 指定した文字のうちのどれか [^文字パターン列] 指定した文字のどれでもない
指定した文字パターンの繰り返しをあらわすために、 次の特殊文字が使われます。
特殊な文字パターン表現(ワイルドカード)
いくつかの文字パターンをつなぎ合わせてもかまいません。 パターン先頭の^ は対象文字列の先頭を意味します。 パターン最後の $ は対象文字列の 最後を意味します。パターン中の他の位置に置かれた場合は、^ や $ は特別な意味を持たず、それ自身を表します。
パターン中には括弧で囲まれたパターンが含まれている場合は、キャプチャと呼ばれます。マッチングが起こった場合には、キャプチャの部分にマッチした文字列は保存され、後で用いることができます。キャプチャは左括弧に対応する番号がつけられます。
例えば、"(a*(.)%w(%s *))"では、a*(.)%w(%s *)に合致する部分文字が第1番目のキャプチャになり、2番目に(.)に合致した一つの文字、%s *が3番目になります。
(例)
function name (arg1,arg2) (function %s*(%a+)(%b()))
によって、Lua言語の関数定義は関数の名前 (%a+)と、そのパラメータリスト(%b())をキャプチャとして得ます。
(例)a = "Linguagem Lua"print(strsub(a, 11)) (結果)Lua.
(例) print(string.lower("Language Lua")) (結果) language lua
(例)print(strupper("Linguagem Lua")) (結果) LANGUAGE LUA.
(例)print(strrep( "0123456789", 2 )) (結果)01234567890123456789
(例)print(string.char("abc",2)) (結果) 42.
(例) name = "Car" id = 123 cmd = string.format( "insert into table (name, id) values (%s, %d)" , name, id )SQLの挿入コマンド(insert)となる文字列を、テーブルのidと名前を使って作っている例です。
print( string.format( "%c", 65 ) )このようにして、データの文字を表すANSI(American NationalStandard Code for Information Interchange) のコード変換が可能です。
(例)a = 123.456 print( string.format( "%+010.2f", a ) )(結果) +000123.46.
%s 文字列 %q 引用符でかこんた文字列 %c 文字 %d 10進整数 %u 符号なし整数 %i (同上) %o 8進整数 %x 16進整数(abcdef) %X 16進整数(ABCDEF) %f 実数 [-]ddd.ddd %e 実数 [-]d.ddd e[+/-]ddd %g 実数 %fまたは %e %E 実数 %eと同じだが大文字のEを使う %% %文字そのもの
書式制御のために、占める文字列の最小サイズを修飾子として%のあとに指定します(例: %10d)。負の値は、左づめを指定します。+を付けると数値の前に+か−を付けます。さらにピリオドに続けて、小数点以下の桁数を指定できます(例: %.2f)。 0を指定すると数値の左に0を追加します。
(例)print( gsub( "Linguagem Lua 3.0", " ", "+" ) ) (結果) Linguagem+Lua+3.0. ( 例2)texto = " Linguagem Lua 3.0 "print( gsub( texto, " *", " " ) ) (結果2)置換は行われないので、"Linguagem Lua 3.0 ". (例3)キャプチャ機能 lista = [[arq.txttexto.txtr.txt]] print( gsub( lista, "(.*)%.txt\n", "move %1.txt %1.bak\n" )) (結果)move arq.txt arq.bakmove texto.txt texto.bakmove r.txt r.bak
(例)print(min(23, 5, 123, 3))print(max(23, 5, 123, 3))(結果) 3 123.
C 言語で利用されている数学関数ライブラリも利用できます。角度の単位はラジアンです(バージョン4までは度を使いました)。
log(value) logaritmo de value na base e log10(value) logaritmo de value da base 10 cos(angle) cosseno de angle (especificado em graus) sin(angle) seno de angle (especificado em graus) tan (angle) tangente de angle (especificado em graus) acos(value) arco cosseno, em graus, de value asin(value) arco seno, em graus, de value atan(value) arco tangente, em graus, de valuea tan2(y,x) arco tangente, em graus, de y/x deg(angle) converte angle (especificado em radianos) para graus rad(angle) converte angle (especificado em graus) para radianos abs(value) valor absoluto de value sqrt(value) raiz quadrada de value ceil(value) inteiro imediatamente inferior a value floor(value) inteiro imediatamente superior a value mod(value,div) divで割った余り random([[from,]to]) 乱数
"*l",1行単位 "*n",単語単位 "*w", ファイルすべて "*n" 数値データ指定のないときは行単位になります。また、数値を指定すると、指定したバイト数の読み込みをします。
(例)ファイルに書かれた数字データをすべて読んでテーブルに入れます。(ただし、1e10といった指数つきデータは読めません。)
data = {} one=io.input( "datas.txt" ) while(one) one= io.read( "*n") if(one) then table.insert(data,one) end end
(例) a, error = ( "c:\doc\arq.txt" ) if not a then print( error )end
(例) a, error = oos.rename( "arq.txt", "arquivo.txt" ) if not a thenprint( error ) ---endarq.txt を arquivo.txt に変更します。変更できなければメッセージを出力します。
(例)作業ファイルに書き込み準備する filename = os.tmpname() io.output( filename )
%a 省略形の曜日 %A 完全な曜日 %b 省略形の月 %B 月 %c 一般的な日付と時刻 %d 日付 01 〜 31 %H 時 00 〜 23 %I 時間 01 〜 12 %j 今年の通算日数 001 〜 366 %m 月 01 〜12 %M 分 00 〜 59 %P 午前午後 am/pm %S 秒 00 〜 60 %U 今年の通算週数 日曜から 00 〜 53 %w 今週の日曜からの日数 0 〜 6 %W 今年の通算週数月曜から 00 〜 53 %x 一般的な日付表記 %X 一般的な時間表記 %y 年の下2桁 %Y 4桁の年 %z タイムゾーン %% 文字としての%
(例)print( os.date( "day %d month %B") ) (結果) day 14 month August
(例) os.execute("mkdir c:\data" )