csv-split-easy
Version:
Splits the CSV string into array of arrays, each representing a row of columns
13 lines (11 loc) • 2.25 kB
JavaScript
/**
* @name csv-split-easy
* @fileoverview Splits the CSV string into array of arrays, each representing a row of columns
* @version 7.1.0
* @author Roy Revelt
* @license MIT
* {@link https://codsen.com/os/csv-split-easy/}
*/
import{remSep as c}from"string-remove-thousand-separators";var d="7.1.0";var v=d,g={removeThousandSeparatorsFromNumbers:!0,padSingleDecimalPlaceNumbers:!0,forceUKStyle:!1};function N(t,p){let o=0,a=0,i=[],m=[],n=!1,l=!0;if(p&&typeof p!="object")throw new Error(`csv-split-easy/split(): [THROW_ID_02] Options object must be a plain object! Currently it's of a type ${typeof p} equal to:
${JSON.stringify(p,null,4)}`);let s={...g,...p};if(typeof t!="string")throw new TypeError(`csv-split-easy/split(): [THROW_ID_04] input must be string! Currently it's: ${typeof t}, equal to: ${JSON.stringify(t,null,4)}`);if(t==="")return[[""]];t=t.trim();for(let e=0,u=t.length;e<u;e++){if(l&&t[e]!=='"'&&t[e]!==","&&t[e].trim()!==""&&(l=!1),t[e]==='"')if(n&&t[e+1]==='"')e+=1;else if(n){n=!1;let r=t.slice(o,e);r.trim()!==""&&(l=!1);let f=/""/.test(r)?r.replace(/""/g,'"'):c(r,{removeThousandSeparatorsFromNumbers:s.removeThousandSeparatorsFromNumbers,padSingleDecimalPlaceNumbers:s.padSingleDecimalPlaceNumbers,forceUKStyle:s.forceUKStyle});i.push(f)}else n=!0,o=e+1;else if(!n&&t[e]===","){if(t[e-1]!=='"'&&!n){let r=t.slice(o,e);r.trim()!==""&&(l=!1),i.push(c(r,{removeThousandSeparatorsFromNumbers:s.removeThousandSeparatorsFromNumbers,padSingleDecimalPlaceNumbers:s.padSingleDecimalPlaceNumbers,forceUKStyle:s.forceUKStyle}))}o=e+1,a&&(a=0)}else if(t[e]===`
`||t[e]==="\r"){if(!a){if(a=e,!n&&t[e-1]!=='"'){let r=t.slice(o,e);r.trim()!==""&&(l=!1),i.push(c(r,{removeThousandSeparatorsFromNumbers:s.removeThousandSeparatorsFromNumbers,padSingleDecimalPlaceNumbers:s.padSingleDecimalPlaceNumbers,forceUKStyle:s.forceUKStyle}))}l?i.length=0:m.push(i),l=!0,i=[]}o=e+1}else a&&(a=0,o=e);if(e+1===u){if(t[e]!=='"'){let r=t.slice(o,e+1);r.trim()&&(l=!1),i.push(c(r,{removeThousandSeparatorsFromNumbers:s.removeThousandSeparatorsFromNumbers,padSingleDecimalPlaceNumbers:s.padSingleDecimalPlaceNumbers,forceUKStyle:s.forceUKStyle}))}l?i=[]:m.push(i),l=!0}}return m.length===0?[[""]]:m}export{g as defaults,N as splitEasy,v as version};