{"id":6124,"date":"2022-04-12T11:39:42","date_gmt":"2022-04-12T10:39:42","guid":{"rendered":"https:\/\/solidt.eu\/site\/?p=6124"},"modified":"2024-07-16T14:01:34","modified_gmt":"2024-07-16T13:01:34","slug":"c-basic-simple-csv","status":"publish","type":"post","link":"https:\/\/solidt.eu\/site\/c-basic-simple-csv\/","title":{"rendered":"C# Basic\/Simple CSV builder"},"content":{"rendered":"\n<div style=\"height: 250px; position:relative; margin-bottom: 50px;\" class=\"wp-block-simple-code-block-ace\"><pre class=\"wp-block-simple-code-block-ace\" style=\"position:absolute;top:0;right:0;bottom:0;left:0\" data-mode=\"csharp\" data-theme=\"monokai\" data-fontsize=\"14\" data-lines=\"Infinity\" data-showlines=\"true\" data-copy=\"false\">using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing System.Text;\n\nnamespace Domain.Helpers\n{\n    public class CsvBuilder\n    {\n        private readonly List&lt;List&lt;object>> Lines = new();\n\n        public void AddLine(params object[] data) => Lines.Add(data.ToList());\n        \n        private static string SerializeCsvValue(object value)\n        {\n            var x = value;\n            if (x is bool b) x = b ? 1 : 0;\n            if (x is DateTime d) x = string.Join(\" \", d.ToString(\"s\").Split('T'));\n\n            var strVal = Convert.ToString(x, CultureInfo.InvariantCulture);\n            if (string.IsNullOrWhiteSpace(strVal)) return \"\";\n\n            if (NumberHelper.IsNumeric(x) || x is DateTime || x is bool)\n                return $\"\\\"{strVal.Replace(\"\\\"\", \"\\\"\\\"\")}\\\"\";\n\n            \/\/ use \\t as excel conversion trick see: https:\/\/superuser.com\/a\/704291\/543593\n            return $\"\\\"\\t{strVal.Replace(\"\\\"\", \"\\\"\\\"\")}\\\"\";\n        }\n\n        public string Build(string separator = \";\")\n        {\n            var sb = new StringBuilder();\n            sb.Append('\\uFEFF'); \/\/ UTF-8 BOM for excel to display UTF-8 characters\n            foreach (var line in Lines)\n                sb.AppendLine(string.Join(separator, line.Select(SerializeCsvValue)));\n            return sb.ToString();\n        }\n    }\n}\n<\/pre><\/div>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[6,4,1],"tags":[],"class_list":["post-6124","post","type-post","status-publish","format-standard","hentry","category-dotnet","category-programming","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/6124","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/comments?post=6124"}],"version-history":[{"count":6,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/6124\/revisions"}],"predecessor-version":[{"id":8765,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/6124\/revisions\/8765"}],"wp:attachment":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/media?parent=6124"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/categories?post=6124"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/tags?post=6124"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}