Lua-file-io
Lua-ファイルI/O
I/Oライブラリは、Luaのファイルの読み取りと操作に使用されます。 Luaには、暗黙的なファイル記述子と明示的なファイル記述子の2種類のファイル操作があります。
次の例では、サンプルファイルtest.luaを以下に示すように使用します。
-- sample test.lua
-- sample2 test.lua
単純なファイルを開く操作では、次のステートメントを使用します。
file = io.open (filename [, mode])
次の表に、さまざまなファイルモードを示します。
Sr.No. | Mode & Description |
---|---|
1 |
"r" 読み取り専用モード。既存のファイルが開かれるデフォルトのモードです。 |
2 |
"w" 既存のファイルを上書きするか、新しいファイルを作成する書き込み可能モード。 |
3 |
"a" 既存のファイルを開く、または追加用の新しいファイルを作成する追加モード。 |
4 |
"r+" 既存のファイルの読み取りおよび書き込みモード。 |
5 |
"w+" ファイルが存在する場合、または読み取り/書き込み権限で新しいファイルが作成される場合、既存のデータはすべて削除されます。 |
6 |
"a+" 既存のファイルを開く、または新しいファイルを作成する読み取りモードを有効にした追加モード。 |
暗黙的なファイル記述子
暗黙的なファイル記述子は、標準の入力/出力モードを使用するか、単一の入力および単一の出力ファイルを使用します。 暗黙的なファイル記述子の使用例を以下に示します。
-- Opens a file in read
file = io.open("test.lua", "r")
-- sets the default input file as test.lua
io.input(file)
-- prints the first line of the file
print(io.read())
-- closes the open file
io.close(file)
-- Opens a file in append mode
file = io.open("test.lua", "a")
-- sets the default output file as test.lua
io.output(file)
-- appends a word test to the last line of the file
io.write("-- End of the test.lua file")
-- closes the open file
io.close(file)
プログラムを実行すると、test.luaファイルの最初の行の出力が得られます。 このプログラムでは、次の出力が得られました。
-- Sample test.lua
これは、test.luaファイルのステートメントの最初の行でした。 また、「-test.luaファイルの終わり」という行がtest.luaコードの最後の行に追加されます。
上記の例では、io。 "x"メソッドを使用して、暗黙的な記述子がファイルシステムでどのように機能するかを確認できます。 上記の例では、オプションのパラメーターなしでio.read()を使用しています。 オプションのパラメーターは次のいずれかです。
Sr.No. | Mode & Description |
---|---|
1 |
"*n" 現在のファイル位置から読み取り、ファイル位置に存在する場合は数値を返し、nilを返します。 |
2 |
"*a" 現在のファイル位置からファイルのすべての内容を返します。 |
3 |
"*l" 現在のファイル位置から行を読み取り、ファイル位置を次の行に移動します。 |
4 |
number 関数で指定されたバイト数を読み取ります。 |
他の一般的なI/Oメソッドには、
- * io.tmpfile()*-プログラムが終了すると削除される読み取りおよび書き込み用の一時ファイルを返します。
- * io.type(file)*-入力ファイルに基づいて、ファイル、閉じたファイル、またはnilを返します。
- * io.flush()*-デフォルトの出力バッファをクリアします。
- * io.lines(オプションのファイル名)*-ファイル名が指定されているか、デフォルトのファイルが使用され、最後に閉じられていない場合に、ファイルをループして最後にファイルを閉じる汎用の_for_ループ反復子を提供しますループ。
明示的なファイル記述子
多くの場合、一度に複数のファイルを操作できる明示的なファイル記述子を使用します。 これらの関数は、暗黙的なファイル記述子に非常に似ています。 ここでは、io.function_nameの代わりにfile:function_nameを使用します。 同じ暗黙的なファイル記述子の例のファイルバージョンの次の例を次に示します。
-- Opens a file in read mode
file = io.open("test.lua", "r")
-- prints the first line of the file
print(file:read())
-- closes the opened file
file:close()
-- Opens a file in append mode
file = io.open("test.lua", "a")
-- appends a word test to the last line of the file
file:write("--test")
-- closes the open file
file:close()
プログラムを実行すると、暗黙的な記述子の例と同様の出力が得られます。
-- Sample test.lua
ファイルを開くモードと外部記述子の読み取りパラメータはすべて、暗黙的なファイル記述子と同じです。
他の一般的なファイル方式には、
- * file:seek(オプションのwhence、オプションのオフセット)*-Whenceパラメーターは「set」、「cur」、または「end」です。 ファイルの先頭から更新されたファイル位置で新しいファイルポインタを設定します。 この関数では、オフセットはゼロベースです。 最初の引数が「設定」されている場合、オフセットはファイルの先頭から測定されます。 「cur」の場合、ファイル内の現在の位置から。または、「終了」の場合はファイルの最後から。 デフォルトの引数値は「cur」と0であるため、現在のファイル位置は引数なしでこの関数を呼び出すことで取得できます。
- * file:flush()*-デフォルトの出力バッファをクリアします。
- * io.lines(オプションのファイル名)*-ファイル名が指定されているか、デフォルトのファイルが使用され、最後に閉じられていない場合に、ファイルをループして最後にファイルを閉じる汎用の_for_ループ反復子を提供しますループ。
シークメソッドを使用する例を以下に示します。 ファイルの終わりの前の25の位置からカーソルをオフセットします。 読み取り関数は、ファイルの残りをシーク位置から出力します。
-- Opens a file in read
file = io.open("test.lua", "r")
file:seek("end",-25)
print(file:read("*a"))
-- closes the opened file
file:close()
次のような出力が得られます。
sample2 test.lua
--test
Luaファイル操作のすべての機能を知るために、さまざまなモードとパラメーターをすべて試すことができます。