-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcreateJson.js
83 lines (67 loc) · 1.78 KB
/
createJson.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
// format horse-bowl data into JSON ktarbet Jan 2017
var fs = require('fs');
var path = require('path');
files = fs.readdirSync('data');
console.log("var questions = [ ");
for(var i=0; i<files.length; i++)
{
// console.log(files[i]);
var lines = readFile('data/'+files[i]);
linesToJSON(lines);
}
console.log(" ];");
//converts array of Q/A text into json array format
function linesToJSON(lines){
//2017 SENIOR BEHAVIOR
var category = lines[0].match(/[0-9]{4}\s*SENIOR\s*(.+)/)[1];
var i=1;
//508 (easy) HIH505-1/DET293
var re =/^([0-9]+)\s*\(([a-zA-Z]+)\)\s*(.+)/
do
{
//var result = lines[i].match(/^([0-9]+)\s*\(([a-zA-Z]+)\)\s*(.+)/);
var result = lines[i].match(re);
if( result == null)
{
i++;
continue;
}
var result2 = lines[i+1].match(/^Q:\s+(.*)/);
var result3 = lines[i+2].match(/^A:\s+(.*)/);
var opt=""; // some answers require extra lines
var j=i+3;
while(j < lines.length && lines[j].trim() != "" && lines[j].trim().length >1 && lines[j].match(re) === null )
{
opt+=" "+lines[j].trim();
j++;
}
if(result && result2 && result3 )
{
var level = result[2];
console.log(
"{"
+"\"category\":\""+category+"\","
+"\"level\":\""+level+"\","
+"\"number\":\""+ esc(result[1])+" "+esc(result[2])+" " +esc(result[3])+"\","
+"\"question\":\""+esc(result2[1])+"\","
+"\"answer\":\""+esc(result3[1])+esc(opt)+"\"},");
i+=3;
}
else
{
i++;
}
} while(i <lines.length-3);
}
function esc(txt)
{
if( txt == null)
return null;
return txt.split("\"").join("\\\"").trim();
//return txt.replace("\"","\\\"");
}
function readFile(fileName){
var fs = require('fs');
var array = fs.readFileSync(fileName).toString().split("\r\n");
return array;
}