(Luaノート):LuaファイルI / O

目次

LuaファイルI / O

シンプルモード

フルモード


LuaファイルI / O

  • ファイルの読み取りと処理のためのLua I / Oライブラリ
シンプルなモデル 現在の入力ファイルと現在の出力ファイルがあり、これらのファイルに関連する操作を提供する
完全なモデル 実現するには外部ファイルハンドルを使用します。すべてのファイル操作をオブジェクト指向形式のファイルハンドルメソッドとして定義します
  • シンプルモードは、シンプルなファイル操作を行う場合により適しています。しかし、いくつかの高度なファイル操作を行う場合、シンプルモードでは不十分なようです。
    • たとえば、複数のファイルを同時に読み取るなどの操作には、フルモードの方が適しています。
  • ファイルを開く操作ステートメントは次のとおりです。
file = io.open (filename [, mode])
  • モードの値は次のとおりです。
r ファイルを読み取り専用で開くには、ファイルが存在している必要があります。
w 書き込み専用ファイルを開きます。ファイルが存在する場合、ファイルの長さは0にクリアされます。つまり、ファイルの内容は消えます。ファイルが存在しない場合は、ファイルを作成します。
a 追加モードで書き込み専用ファイルを開きます。ファイルが存在しない場合は作成され、ファイルが存在する場合は書き込まれたデータがファイルの最後に追加され、元のファイルの内容が保持されます。(EOFシンボルは予約済み)
r + ファイルを読み取り/書き込みモードで開くには、ファイルが存在している必要があります。
w + 読み取りと書き込みが可能なファイルを開きます。ファイルが存在する場合、ファイルの長さはゼロにクリアされます。つまり、ファイルの内容は消えます。ファイルが存在しない場合は、ファイルを作成します。
a + aに似ていますが、このファイルは読み取りと書き込みが可能です
b バイナリモード。ファイルがバイナリファイルの場合は、bを追加できます。
+ 記号は、ファイルを読み書きできることを示します

シンプルモード

  • シンプルモードでは、標準I / Oを使用するか、現在の入力ファイルと現在の出力ファイルを使用します。
  • 以下はfile.luaのファイルコードで、操作対象のファイルはtest.luaです(ファイルが存在しない場合は作成する必要があります)。コードは次のとおりです。
-- 以只读方式打开文件
file = io.open("test.lua", "r")

-- 设置默认输入文件为 test.lua
io.input(file)

-- 输出文件第一行
print(io.read())

-- 关闭打开的文件
io.close(file)

-- 以附加的方式打开只写文件
file = io.open("test.lua", "a")

-- 设置默认输出文件为 test.lua
io.output(file)

-- 在文件最后一行添加 Lua 注释
io.write("--  test.lua 文件末尾注释")

-- 关闭打开的文件
io.close(file)

输出:-- test.lua 文件
  • 上記の例では、io。 "x"メソッドが使用されています。io.read()にはパラメーターありません。パラメーターは次のいずれかです。
モード 解説
「* n」 数値を読み取って返します。例:file.read( "* n")
「* a」 現在の位置からファイル全体を読み取ります。例:file.read( "* a")
"* l"(デフォルト) 次の行を読み取り、ファイルの終わり(EOF)でnilを返します。例:file.read( "* l")
指定された文字数の文字列、またはEOFでnilを返します。例:file.read(5)
  • その他のioメソッドは次のとおりです。
io.tmpfile() 一時ファイルハンドルを返し、ファイルは更新モードで開かれ、プログラムが終了すると自動的に削除されます
io.type(ファイル): objが使用可能なファイルハンドルかどうかを確認する
io.flush(): バッファ内のすべてのデータをファイルに書き込みます
io.lines(オプションのファイル名) 反復関数を返します。各呼び出しはファイル内のコンテンツの行を取得し、ファイルの最後に到達するとnilを返しますが、ファイルは閉じられません

フルモード

  • 複数のファイルを同時に処理します。io.function_nameメソッドの代わりにfile:function_nameを使用する必要があります次の例は、同じファイルを同時に処理する方法を示しています。
-- 以只读方式打开文件
file = io.open("test.lua", "r")

-- 输出文件第一行
print(file:read())

-- 关闭打开的文件
file:close()

-- 以附加的方式打开只写文件
file = io.open("test.lua", "a")

-- 在文件最后一行添加 Lua 注释
file:write("--test")

-- 关闭打开的文件
file:close()

-- test.lua 文件
  • 読み取りのパラメーターは、単純モードと一致しています。
  • その他の方法:
file:seek(オプションのwhence、オプションのオフセット)
  • 現在のファイル位置を設定および取得します。成功した場合は、最終的なファイル位置(バイト単位)を返します。失敗した場合は、nilとエラーメッセージを返します。パラメータwhyceの値は次のとおりです。

    • "set":ファイルの最初から開始
    • "cur":現在の位置から開始[デフォルト]
    • "end":ファイルの最後から開始
    • オフセット:デフォルトは0
    • パラメータなしの場合、file:seek()は現在の位置を返し、file:seek( "set")はファイルの先頭に移動し、file:seek( "end")はファイルの最後に移動してファイルサイズを返します。
ファイル:flush()
  • バッファ内のすべてのデータをファイルに書き込みます
io.lines(オプションのファイル名)
  • :打开指定的文件filename为读模式并返回一个迭代函数,每次调用将获得文件中的一行内容,当到文件尾时,将返回nil,并自动关闭文件。
    若不带参数时io.lines() <=> io.input():lines(); 读取默认输入设备的内容,但结束时不关闭文件,如:

for line in io.lines("main.lua") do

  print(line)

end

 

  • 以下实例使用了 seek 方法,定位到文件倒数第 25 个位置并使用 read 方法的 *a 参数,即从当期位置(倒数第 25 个位置)读取整个文件。
-- 以只读方式打开文件
file = io.open("test.lua", "r")

file:seek("end",-25)
print(file:read("*a"))

-- 关闭打开的文件
file:close()
</pre>
<p>我这边输出的结果是:</p>
<pre>
st.lua 文件末尾--test

【转载】原文链接:https://www.runoob.com/lua/lua-file-io.html

おすすめ

転載: blog.csdn.net/baidu_41388533/article/details/108504960