UNPKG

@naimi/alib

Version:
145 lines (110 loc) 3.78 kB
//!--- CSV 2 2D Array //! Return array of string values, or NULL if CSV string not well formed. function CSVtoArray(text) { var re_valid = /^\s*(?:'[^'\\]*(?:\\[\S\s][^'\\]*)*'|"[^"\\]*(?:\\[\S\s][^"\\]*)*"|[^,'"\s\\]*(?:\s+[^,'"\s\\]+)*)\s*(?:,\s*(?:'[^'\\]*(?:\\[\S\s][^'\\]*)*'|"[^"\\]*(?:\\[\S\s][^"\\]*)*"|[^,'"\s\\]*(?:\s+[^,'"\s\\]+)*)\s*)*$/; var re_value = /(?!\s*$)\s*(?:'([^'\\]*(?:\\[\S\s][^'\\]*)*)'|"([^"\\]*(?:\\[\S\s][^"\\]*)*)"|([^,'"\s\\]*(?:\s+[^,'"\s\\]+)*))\s*(?:,|$)/g; //! Return NULL if input string is not well formed CSV string. if (!re_valid.test(text)) return null; var a = []; //! Initialize array to receive values. text.replace(re_value, //! "Walk" the string using replace with callback. function(m0, m1, m2, m3) { //! Remove backslash from \' in single quoted values. if (m1 !== undefined) a.push(m1.replace(/\\'/g, "'")); // Remove backslash from \" in double quoted values. else if (m2 !== undefined) a.push(m2.replace(/\\"/g, '"')); else if (m3 !== undefined) a.push(m3); return ''; // Return empty string. }); // Handle special case of empty last value. if (/,\s*$/.test(text)) a.push(''); return a; }; function csv2arr(csv) { try { rows = csv.split("\n"); return rows.map(function(row) { return row.split(","); }); } catch (e) { console.log("ERROR " + e.number + ": " + e.description + " - csv2arr (" + csv + ")\n"); } }; function csv2arr2(csv) { var ret = []; var rows = csv.split("\n"); for (var i = 0; i < rows.length; i++) { var cells = rows[i].split(","); ret.push(cells); } return ret; }; read_csv = function(file_name) { try { if (typeof js_engine != 'undefined') //! if (js_engine) //js_engine = 0: node, 1: JScript str = fs.OpenTextFile(file_name, 1).ReadAll(); else str = require('fs').readFileSync(file_name, 'utf8'); //! console.log(str); //! var ret = str.split(','); var ret = csv2arr2(str); } catch (e) { console.log("ERROR alib-csv-01 " + e.number + ": " + e.description + " - read_csv (" + file_name + ")\n"); } return ret; } //! find obj by key in array of objs findObjectByKey = function(array, key, value) { //! convert to prototype for (var i = 0; i < array.length; i++) if (array[i][key] === value) return array[i]; return null; } sum_2darr = function(arr) { var siz_m = arr.length; var siz_n = arr[0].length; ret = {}; ret.sum_o = [0, 0, 0, 0]; ret.sum_d = [0, 0, 0, 0]; for (var i = 0; i < siz_m; i++) { for (var j = 0; j < siz_n; j++) { ret.sum_o[i] += arr[i][j]; ret.sum_d[j] += arr[i][j]; } } return ret; } save = function(s, fn) { if (fn.includes("function")) { console.log("wrong fn: " + fn); return -1; } try { if (jscript) { var fs = new ActiveXObject("Scripting.FileSystemObject"); var ForReading = 1, ForWriting = 2, ForAppending = 8; //! iomode 1: read, 2: write, 8: append var TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0; //! format var fh = fs.OpenTextFile(fn, ForAppending, true); fh.Write(s); fh.Close(); } else { fs = require('fs'); fs.appendFileSync(fn, s, 'utf8', function(err) { if (err) return console.log(err); }); } } catch (e) { console.log("ERROR " + e.number + ": " + e.description + " - save_f (" + fn + ")\n"); } } log_save = function(s, fn, show) { if (show) process.stdout.write(s); if (typeof s == 'string') save(s, fn); else console.log("ERROR 109: check input data"); }