{"id":5775,"date":"2021-12-07T10:57:47","date_gmt":"2021-12-07T09:57:47","guid":{"rendered":"https:\/\/solidt.eu\/site\/?p=5775"},"modified":"2024-08-26T16:06:31","modified_gmt":"2024-08-26T15:06:31","slug":"javascript-parse-csv","status":"publish","type":"post","link":"https:\/\/solidt.eu\/site\/javascript-parse-csv\/","title":{"rendered":"Javascript parse CSV"},"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=\"javascript\" data-theme=\"monokai\" data-fontsize=\"14\" data-lines=\"Infinity\" data-showlines=\"true\" data-copy=\"false\">function* getLinesFromString(source) {\n    let lines = String(source || \"\").matchAll(\/^.*$\/gm);\n    for (const [line] of lines) yield line;\n}\n\nfunction* getCsvValueFromLine(source, separator = \",\") {\n    const line = String(source || \"\");\n    let inString = false;\n    let start = 0;\n\n    for (let i = 0; i &lt; line.length; i++) {\n        const char = line[i];\n        const nextChar = line[i + 1];\n\n        if (char === '\"') {\n            inString = !inString;\n        } else if (!inString &amp;&amp; char === separator) {\n            yield line.substring(start, i);\n            start = i + 1;\n        } else if (i + 1 === line.length) {\n            yield line.substring(start, i + 1);\n        }\n    }\n}\n\nfunction decodeValue(val) {\n    return val.trim().replace(\/^\"|\"$\/g, \"\").replace(\/\"\"\/g, '\"');\n}\n\nfunction trimChars(s, c) {\n    if (c === \"]\") c = \"\\\\]\";\n    if (c === \"^\") c = \"\\\\^\";\n    if (c === \"\\\\\") c = \"\\\\\\\\\";\n    return s.replace(new RegExp(\"^[\" + c + \"]+|[\" + c + \"]+$\", \"g\"), \"\");\n}\n\nconst csv = `value1,\"value,with,comma\",\"value \"\"with quotes\"\" inside\",value4`;\nfor (const line of getLinesFromString(csv)) {\n    console.log(\"======================\");\n    for (const value of getCsvValueFromLine(line, \",\")) {\n        console.log(\"value:\", decodeValue(value));\n    }\n}<\/pre><\/div>\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":[5,4,1],"tags":[],"class_list":["post-5775","post","type-post","status-publish","format-standard","hentry","category-javascript","category-programming","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/5775","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=5775"}],"version-history":[{"count":4,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/5775\/revisions"}],"predecessor-version":[{"id":8881,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/5775\/revisions\/8881"}],"wp:attachment":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/media?parent=5775"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/categories?post=5775"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/tags?post=5775"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}