2026-09-30 08:08:27 +03:00
|
|
|
class_name CSVLoader
|
|
|
|
|
|
2026-09-30 22:46:26 +03:00
|
|
|
const SPLITTER = '|'
|
2026-09-30 08:08:27 +03:00
|
|
|
|
2026-09-30 22:46:26 +03:00
|
|
|
static func load(csv_text: String) -> Dictionary:
|
|
|
|
|
var result: Dictionary = {}
|
2026-09-30 08:08:27 +03:00
|
|
|
|
|
|
|
|
var lines := csv_text.strip_edges().split("\n")
|
|
|
|
|
|
|
|
|
|
if lines.size() < 2:
|
2026-09-30 22:46:26 +03:00
|
|
|
return result
|
2026-09-30 08:08:27 +03:00
|
|
|
|
2026-09-30 22:46:26 +03:00
|
|
|
var headers := lines[0].split(SPLITTER)
|
2026-09-30 08:08:27 +03:00
|
|
|
|
|
|
|
|
for i in range(1, lines.size()):
|
|
|
|
|
var line := lines[i].strip_edges()
|
|
|
|
|
|
|
|
|
|
if line.is_empty():
|
|
|
|
|
continue
|
|
|
|
|
|
2026-09-30 22:46:26 +03:00
|
|
|
var values := line.split(SPLITTER)
|
2026-09-30 08:08:27 +03:00
|
|
|
|
|
|
|
|
if values.size() != headers.size():
|
|
|
|
|
push_warning(
|
|
|
|
|
"CSV row %d has %d columns, expected %d"
|
|
|
|
|
% [i + 1, values.size(), headers.size()]
|
|
|
|
|
)
|
|
|
|
|
continue
|
|
|
|
|
|
2026-09-30 22:46:26 +03:00
|
|
|
var elem: Dictionary = {}
|
2026-09-30 08:08:27 +03:00
|
|
|
|
|
|
|
|
for j in range(headers.size()):
|
2026-09-30 22:46:26 +03:00
|
|
|
elem[headers[j].strip_edges()] = values[j].strip_edges()
|
2026-09-30 08:08:27 +03:00
|
|
|
|
2026-09-30 22:46:26 +03:00
|
|
|
result[elem[headers[0]]] = elem
|
|
|
|
|
return result
|