aboutsummaryrefslogtreecommitdiff
path: root/parseClasses.js
diff options
context:
space:
mode:
Diffstat (limited to 'parseClasses.js')
-rw-r--r--parseClasses.js67
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