UNPKG

@xogeny/mat-parser

Version:

A parser for MATLAB v4 files

105 lines 3.48 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const readers_1 = require("../readers"); const parser_1 = require("../parser"); const dsres_1 = require("../dsres"); const yargs = require("yargs"); const fs = require("fs"); const debug = require("debug"); const dsresDebug = debug("mat-parser:dsres"); // dsresDebug.enabled = true; let opts = yargs .default("final", [], "Variables to get the final value for") .default("signal", [], "Variables to get the continuous signal for") .default("root", [], "Variables that start at this part") .default("outfile", null, "Output file") .default("pretty", true, "Pretty output") .default("stats", false, "Statistics") .default("parts", false, "Include all data for 3D parts") .alias("f", "final") .alias("s", "signal") .alias("r", "root") .alias("o", "outfile") .alias("p", "pretty") .alias("d", "parts"); let args = opts.argv; dsresDebug("args = %o", args); if (args._.length != 1) { console.error("Usage: " + args["$0"] + " [options] file"); process.exit(1); } if (!Array.isArray(args.final)) args.final = [args.final]; if (!Array.isArray(args.signal)) args.signal = [args.signal]; if (!Array.isArray(args.root)) args.root = [args.root]; function partOrSignal(signals, root) { return (name) => { if (signals.indexOf("*") >= 0) return true; if (signals.indexOf(name) >= 0) return true; if (root.some((n) => name.startsWith(n + "."))) { return true; } return false; }; } exports.partOrSignal = partOrSignal; function matchsNames(names) { return (name) => { return names.indexOf("*") >= 0 || names.indexOf(name) >= 0; }; } async function run() { let filename = args._[0]; let signals = [...args.signal]; let roots = [...args.root]; let stats = args.stats; dsresDebug("root = %o", roots); let obs = readers_1.blobReader(filename); let file = new parser_1.MatFile(obs); let handler = new dsres_1.DymolaResultsExtractor(partOrSignal(signals, roots), matchsNames(args.final)); await file.parse(handler); let result = { trajectories: handler.trajectories, final: handler.finals, }; if (stats) { dsresDebug("Signals: "); Object.keys(result.trajectories).forEach((key) => { let val = result.trajectories[key]; if (Array.isArray(val)) { dsresDebug(" %s = %d .. %d", key, val[0], val[val.length - 1]); } else { dsresDebug(" %s = %d", key, val); } }); dsresDebug("Final Values: "); Object.keys(result.final).forEach((key) => { let val = result.final[key]; dsresDebug(" %s = %d", key, val); }); } if (args.outfile) { if (args.pretty) { fs.writeFileSync(args.outfile, JSON.stringify(result, null, 4)); } else { fs.writeFileSync(args.outfile, JSON.stringify(result)); } } else { if (args.pretty) { console.log(JSON.stringify(result, null, 4)); } else { console.log(JSON.stringify(result)); } } return result; } run().catch((e) => console.error(e)); //# sourceMappingURL=dsres.js.map