Lua:
Arbeiten mit CSV
Wie geht das:
In Lua kann die Arbeit mit CSV-Dateien durch grundlegende Datei-IO-Operationen, die von der Sprache bereitgestellt werden, ohne die Notwendigkeit externer Bibliotheken für einfache Aufgaben, angegangen werden. Für komplexere Operationen, wie z.B. die Behandlung von Sonderfällen (z.B. Kommas innerhalb von Werten), könnte es vorteilhaft sein, Drittanbieter-Bibliotheken wie lua-csv
zu verwenden.
Eine CSV-Datei lesen
Hier ist ein einfaches Beispiel, um eine CSV-Datei Zeile für Zeile zu lesen, wobei jede Zeile basierend auf dem Kommatrennzeichen in Werte aufgeteilt wird.
function parseCSVLine(line)
local result = {}
local from = 1
local sep = ","
local field
while true do
local start, finish = string.find(line, sep, from)
if not start then
table.insert(result, string.sub(line, from))
break
end
field = string.sub(line, from, start - 1)
table.insert(result, field)
from = finish + 1
end
return result
end
local file = io.open("example.csv", "r")
for line in file:lines() do
local values = parseCSVLine(line)
for i, v in ipairs(values) do
print(i, v)
end
end
file:close()
Beispielausgabe (für eine example.csv
mit Inhalt “name,age\newlineJohn Doe,30\newlineJane Doe,32”):
1 name
2 age
1 John Doe
2 30
1 Jane Doe
2 32
Eine CSV-Datei schreiben
Um eine CSV-Datei zu generieren, konstruiert man einfach Zeichenketten mit kommagetrennten Werten und schreibt sie Zeile für Zeile in eine Datei.
local data = {
{"name", "age"},
{"John Doe", "30"},
{"Jane Doe", "32"}
}
local file = io.open("output.csv", "w")
for _, v in ipairs(data) do
file:write(table.concat(v, ","), "\n")
end
file:close()
Dies würde eine output.csv
-Datei mit den angegebenen Daten erstellen (oder überschreiben).
lua-csv verwenden
Für fortgeschrittenere CSV-Handhabungen, einschließlich Unterstützung für Anführungszeichen und Escape-Zeichen, ist die Bibliothek lua-csv
eine robuste Wahl.
Zuerst installieren Sie sie mit LuaRocks:
luarocks install lua-csv
Dann wird das Lesen einer CSV-Datei so einfach wie:
local csv = require("csv")
-- Lesen aus einer Datei
for fields in csv.open("example.csv") do
for i, v in ipairs(fields) do
print(i, v)
end
end
Und das Schreiben in eine CSV mit korrekter Quotierung und Escaping:
local file = csv.open("output.csv", {write=true})
local data = {
{"name", "profession", "location"},
{"John Doe", "Software Engineer", "New York, NY"},
{"Jane Doe", "Data Scientist", "\"San Francisco, CA\""}
}
for _, v in ipairs(data) do
file:write(v)
end
Dieser Ansatz behandelt automatisch Komplexitäten wie Kommas und Anführungszeichen innerhalb von Werten.