両方ともリストを引き受けるが、
print(リスト)はタブで連結し、最後は改行を付加。
''printは常に標準出力。
io.write(リスト)は純粋に連結するのみ。
io.writeは現在割り当てられている出力ハンドルが対象。切り替え可能。
(ファイルor標準出力or標準エラーなど、とにかく現在割り当てられているハンドル)
io.input():read(···) と同等。
引数 説明 "*all" ファイル全体を読み込みます。 "*line" 次の行を読み込みます。 "*number" 数値を読み込みます。 <num> 最大で<num>文字の文字列を読み込みます。
Luaにおいて、最も効率が良いのは、全部を読み込んで、処理して、出力するというもの。
t = io.read("*all") --> 一気に読み込む t = string.gsub(t, …) --> 何か処理 io.write(t) --> 出力
次にio.read(*line)も良くある。*lineと指定しなくともread()のデフォルトはこの*lineである。
読み込むのは一行ずつだが、最後の改行はtrimされる。
一番最後に読み込むものが無くなれば、nilを返す。for count = 1, math.huge do -- 無限ループ local line = io.read() if line == nil then break end io.write(string.format("%6d ", count), line, "\n") endただし、io.lines()イテレータを使用する方が自然である。
local lines = {} for line in io.lines() do lines[#lines+1] = line end table.sort(lines) for _, l in ipairs(lines) do io.write(l, "\n") end
io.read("*number") は数値入力を受け付ける。
前に空白系の文字があったら無視される。
一行に複数の数値が入っていることが期待される場合、その個数分だけ"*number"を記載すれば良い。data部 6.0 -3.23 15e12 4.3 234 1000001 io.read("*number", "*number", "*number")while true do local n1, n2, n3 = io.read("*number", "*number", "*number") if not n1 then break end --真ではない。nil or false print(math.max(n1,n2,n3)) end