From ae33f57a3650a3641888be747f17bd213648b1ef Mon Sep 17 00:00:00 2001 From: andrewlalis Date: Tue, 11 Feb 2025 20:51:26 -0500 Subject: [PATCH] Added csv quoting --- .../api_modules/classroom_compliance/api_export.d | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/api/source/api_modules/classroom_compliance/api_export.d b/api/source/api_modules/classroom_compliance/api_export.d index 116c25b..53da3f2 100644 --- a/api/source/api_modules/classroom_compliance/api_export.d +++ b/api/source/api_modules/classroom_compliance/api_export.d @@ -136,6 +136,18 @@ private struct CSVOutputStream(S) if (isByteOutputStream!S) { } void writeCell(string s) { + import std.string; + import std.regex; + import std.algorithm : canFind, any; + const pattern = ctRegex!`\"`; + if (canFind(s, "\"")) { + s = replaceAll(s, pattern, "\"\""); + } + const escapeableChars = ["\"", ",", ",", "\\", "\n"]; + bool shouldQuote = escapeableChars.any!(c => canFind(s, c)); + if (shouldQuote) { + s = "\"" ~ s ~ "\""; + } writeElement(s); }