Lua - E / S de fichier

La bibliothèque d'E / S est utilisée pour lire et manipuler des fichiers dans Lua. Il existe deux types d'opérations sur les fichiers dans Lua, à savoir les descripteurs de fichiers implicites et les descripteurs de fichiers explicites.

Pour les exemples suivants, nous utiliserons un exemple de fichier test.lua comme indiqué ci-dessous.

-- sample test.lua
-- sample2 test.lua

Une simple opération d'ouverture de fichier utilise l'instruction suivante.

file = io.open (filename [, mode])

Les différents modes de fichier sont répertoriés dans le tableau suivant.

N ° Sr. Mode et description
1

"r"

Mode lecture seule et est le mode par défaut dans lequel un fichier existant est ouvert.

2

"w"

Mode d'écriture activé qui écrase le fichier existant ou crée un nouveau fichier.

3

"a"

Mode d'ajout qui ouvre un fichier existant ou crée un nouveau fichier à ajouter.

4

"r+"

Mode lecture et écriture pour un fichier existant.

5

"w+"

Toutes les données existantes sont supprimées si le fichier existe ou si un nouveau fichier est créé avec des autorisations de lecture / écriture.

6

"a+"

Mode d'ajout avec le mode de lecture activé qui ouvre un fichier existant ou crée un nouveau fichier.

Descripteurs de fichier implicites

Les descripteurs de fichier implicites utilisent les modes d'entrée / sortie standard ou en utilisant un seul fichier d'entrée et un seul fichier de sortie. Un exemple d'utilisation de descripteurs de fichiers implicites est présenté ci-dessous.

-- 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)

Lorsque vous exécutez le programme, vous obtiendrez une sortie de la première ligne du fichier test.lua. Pour notre programme, nous avons obtenu la sortie suivante.

-- Sample test.lua

C'était la première ligne de l'instruction dans le fichier test.lua pour nous. La ligne «- Fin du fichier test.lua» serait également ajoutée à la dernière ligne du code test.lua.

Dans l'exemple ci-dessus, vous pouvez voir comment les descripteurs implicites fonctionnent avec le système de fichiers en utilisant les méthodes io. "X". L'exemple ci-dessus utilise io.read () sans le paramètre facultatif. Le paramètre facultatif peut être l'un des suivants.

N ° Sr. Mode et description
1

"*n"

Lit la position actuelle du fichier et renvoie un nombre s'il existe à la position du fichier ou renvoie nul.

2

"*a"

Renvoie tout le contenu du fichier à partir de la position actuelle du fichier.

3

"*l"

Lit la ligne à partir de la position actuelle du fichier et déplace la position du fichier vers la ligne suivante.

4

number

Lit le nombre d'octets spécifié dans la fonction.

D'autres méthodes d'E / S courantes incluent:

  • io.tmpfile() - Renvoie un fichier temporaire pour la lecture et l'écriture qui sera supprimé une fois le programme fermé.

  • io.type(file) - Renvoie si fichier, fichier fermé ou nul en fonction du fichier d'entrée.

  • io.flush() - Efface le tampon de sortie par défaut.

  • io.lines(optional file name)- Fournit un itérateur de boucle for générique qui parcourt le fichier et ferme le fichier à la fin, au cas où le nom de fichier est fourni ou si le fichier par défaut est utilisé et non fermé à la fin de la boucle.

Descripteurs de fichier explicites

Nous utilisons souvent un descripteur de fichier explicite qui nous permet de manipuler plusieurs fichiers à la fois. Ces fonctions sont assez similaires aux descripteurs de fichiers implicites. Ici, nous utilisons file: function_name au lieu de io.function_name. L'exemple suivant de la version de fichier du même exemple de descripteurs de fichiers implicites est illustré ci-dessous.

-- 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()

Lorsque vous exécutez le programme, vous obtiendrez une sortie similaire à l'exemple de descripteurs implicites.

-- Sample test.lua

Tous les modes d'ouverture de fichier et de paramètres de lecture pour les descripteurs externes sont identiques à ceux des descripteurs de fichiers implicites.

D'autres méthodes de fichier courantes comprennent,

  • file:seek(optional whence, optional offset)- D'où le paramètre est "set", "cur" ou "end". Définit le nouveau pointeur de fichier avec la position de fichier mise à jour depuis le début du fichier. Les décalages sont basés sur zéro dans cette fonction. Le décalage est mesuré à partir du début du fichier si le premier argument est "set"; à partir de la position actuelle dans le fichier si c'est "cur"; ou à partir de la fin du fichier s'il est "end". Les valeurs d'argument par défaut sont "cur" et 0, donc la position actuelle du fichier peut être obtenue en appelant cette fonction sans arguments.

  • file:flush() - Efface le tampon de sortie par défaut.

  • io.lines(optional file name)- Fournit un itérateur de boucle for générique qui parcourt le fichier et ferme le fichier à la fin, au cas où le nom de fichier est fourni ou si le fichier par défaut est utilisé et non fermé à la fin de la boucle.

Un exemple d'utilisation de la méthode de recherche est présenté ci-dessous. Il décale le curseur des 25 positions avant la fin du fichier. La fonction de lecture imprime le reste du fichier à partir de la position de recherche.

-- 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()

Vous obtiendrez une sortie similaire à la suivante.

sample2 test.lua
--test

Vous pouvez jouer avec tous les différents modes et paramètres pour connaître toute la capacité des opérations sur les fichiers Lua.