Lua:
Travailler avec CSV
Comment faire :
En Lua, travailler avec des fichiers CSV peut être abordé en utilisant les opérations de base d’entrée/sortie de fichiers fournies par le langage, sans nécessiter de bibliothèques externes pour des tâches simples. Pour des opérations plus complexes, comme la gestion de cas spéciaux (par exemple, des virgules dans les valeurs), il pourrait être bénéfique d’utiliser des bibliothèques tierces comme lua-csv
.
Lire un fichier CSV
Voici un exemple simple pour lire un fichier CSV ligne par ligne, en divisant chaque ligne en valeurs basées sur le séparateur de virgules.
function parseCSVLine(ligne)
local resultat = {}
local de = 1
local sep = ","
local champ
while true do
local debut, fin = string.find(ligne, sep, de)
if not debut then
table.insert(resultat, string.sub(ligne, de))
break
end
champ = string.sub(ligne, de, debut - 1)
table.insert(resultat, champ)
de = fin + 1
end
return resultat
end
local fichier = io.open("exemple.csv", "r")
for ligne in fichier:lines() do
local valeurs = parseCSVLine(ligne)
for i, v in ipairs(valeurs) do
print(i, v)
end
end
fichier:close()
Exemple de sortie (pour un exemple.csv
avec contenu “nom,âge\newlineJohn Doe,30\newlineJane Doe,32”):
1 nom
2 âge
1 John Doe
2 30
1 Jane Doe
2 32
Écrire un fichier CSV
Pour générer un fichier CSV, il suffit de construire des chaînes avec des valeurs séparées par des virgules et de les écrire dans un fichier ligne par ligne.
local donnees = {
{"nom", "âge"},
{"John Doe", "30"},
{"Jane Doe", "32"}
}
local fichier = io.open("sortie.csv", "w")
for _, v in ipairs(donnees) do
fichier:write(table.concat(v, ","), "\n")
end
fichier:close()
Cela créerait (ou écraserait) un fichier sortie.csv
avec les données spécifiées.
Utiliser lua-csv
Pour une gestion plus avancée des CSV, incluant le support des guillemets et des caractères d’échappement, la bibliothèque lua-csv
est un choix robuste.
Premièrement, installez-la en utilisant LuaRocks :
luarocks install lua-csv
Ensuite, lire un fichier CSV devient aussi simple que :
local csv = require("csv")
-- Lire depuis un fichier
for champs in csv.open("exemple.csv") do
for i, v in ipairs(champs) do
print(i, v)
end
end
Et écrire dans un CSV avec des guillemets et échappements appropriés :
local fichier = csv.open("sortie.csv", {write=true})
local donnees = {
{"nom", "profession", "lieu"},
{"John Doe", "Ingénieur Logiciel", "New York, NY"},
{"Jane Doe", "Scientifique de Données", "\"San Francisco, CA\""}
}
for _, v in ipairs(donnees) do
fichier:write(v)
end
Cette approche gère automatiquement les complexités telles que les virgules et guillemets à l’intérieur des valeurs.