diff options
author | JoelHMikael <joel.h.kronqvist@gmail.com> | 2022-01-16 16:50:44 +0200 |
---|---|---|
committer | JoelHMikael <joel.h.kronqvist@gmail.com> | 2022-01-16 16:50:44 +0200 |
commit | 28e4f1cf0dbd1c14a9724d17cf9127d223d85289 (patch) | |
tree | 4daa0e811e580b1963ffb6b6cda04664b7d19245 /parseClasses.js | |
parent | 1a1b117cc9eae2cc2ecfb3695bebe21daf08741b (diff) | |
download | LYLLRuoka-28e4f1cf0dbd1c14a9724d17cf9127d223d85289.tar.gz LYLLRuoka-28e4f1cf0dbd1c14a9724d17cf9127d223d85289.zip |
Actual class parsing
Really messy, feel free to improve, or even rewrite.
Diffstat (limited to 'parseClasses.js')
-rw-r--r-- | parseClasses.js | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/parseClasses.js b/parseClasses.js new file mode 100644 index 0000000..2b3b779 --- /dev/null +++ b/parseClasses.js @@ -0,0 +1,67 @@ +const open = require("./open.js"); +const parse = require("./dbparse.js"); +const fs = require("fs"); +const readline = require("readline"); +const stream = require("stream"); +const getIndexType = require("./dbparse.js").indexType; + +// What a mess. +async function parseClassData(path, DB) +{ + const separator = "\t"; + + const inStream = fs.createReadStream(path) + const outStream = new stream(); + const rl = readline.createInterface(inStream, outStream); + + let lineNum = 0; + let courses = []; + rl.on("line", line => + { + let lineList = line.split(separator); + + let type = getIndexType(lineList[0]); + if (!((type === "class") || (type === "teacher"))) + lineNum = 0; + + if (lineNum % 3 === 0) + courses = lineList; + if ((lineNum % 3) === 2) + { + // Remove the weird "R":s in the end of the classes + for(let i = 0; i < lineList.length; i++) + { + let _s = lineList[i]; + lineList[i] = _s.substring(0, _s.length - 1); + } + addToDBFromLists(DB, courses, lineList, + index => { return getIndexType(index) === "course"; }, + index => { return getIndexType(index) === "class"; } + ); + } + lineNum++ + }); + rl.on("close", () => + { + return 0; + }); +} + +function addToDBFromLists(DB, l1, l2, l1cond, l2cond) +{ + for (let i = 0; i < l1.length; i++) + { + if (l1cond(l1[i]) && l2cond(l2[i])) + DB.execute("INSERT IGNORE INTO classes VALUES (?, ?)", [l1[i], l2[i]]); + } +} + +async function parseClasses(path1, path2, DB) +{ + let parsed = []; + parsed.push(parseClassData(path1, DB)); + parsed.push(parseClassData(path2, DB)); + return await Promise.all(parsed); +} + +exports.classes = parseClasses;
\ No newline at end of file |