From 4a9092bedbad61c27bfa6ab7674e903196308988 Mon Sep 17 00:00:00 2001 From: Oliver-Akins Date: Sun, 3 Jan 2021 16:30:26 -0700 Subject: [PATCH] Use proper CSV parsing. --- server/src/objects/Game.ts | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/server/src/objects/Game.ts b/server/src/objects/Game.ts index c5989c6..1552455 100644 --- a/server/src/objects/Game.ts +++ b/server/src/objects/Game.ts @@ -1,9 +1,10 @@ import { Team } from "./Team"; import { Deck } from "./Deck"; +import neatCSV from "neat-csv"; import { Logger } from "tslog"; import { games } from "../main"; import { Player } from "./Player"; -import { readFileSync } from "fs"; +import { readFile } from "fs"; export class Game { readonly id: string; @@ -70,20 +71,30 @@ export class Game { */ // parse the questions from the CSV - let data = readFileSync(conf.game.cards.questions.fingerprint, `utf-8`).replace(/\r/g, ``); - let questions: question_deck[] = []; - for (var line of data.split(`\n`).slice(conf.game.cards.questions.header_rows)) { - questions.push(line.split(`,`)[conf.game.cards.questions.column]); - }; - this._questions = new Deck(questions); + readFile(conf.game.cards.questions.fingerprint, `utf-8`, (err, filebuffer) => { + if (err) throw err; + neatCSV(filebuffer) + .then((data) => { + let questions: question_deck[] = []; + for (var entry of data) { + questions.push(Object.values(entry)[conf.game.cards.questions.column]); + }; + this._questions = new Deck(questions); + }); + }); // Parse the object deck from CSV - let objectsCSV = readFileSync(conf.game.cards.objects.fingerprint, `utf-8`).replace(/\r/g, ``); - let objects: object_deck[] = []; - for (var line of objectsCSV.split(`\n`).slice(conf.game.cards.objects.header_rows)) { - objects.push(line.split(`,`)); - }; - this._objects = new Deck(objects); + readFile(conf.game.cards.objects.fingerprint, `utf-8`, (err, filebuffer) => { + if (err) throw err; + neatCSV(filebuffer) + .then((data) => { + let objects: object_deck[] = []; + for (var line of data) { + objects.push(Object.values(line)); + }; + this._objects = new Deck(objects); + }) + }); }; private parseDeckGoogleSheets(conf: config): void {