-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathparseExcelData.js
More file actions
102 lines (80 loc) · 3.48 KB
/
parseExcelData.js
File metadata and controls
102 lines (80 loc) · 3.48 KB
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
this.parseData = (data) => {
const variableRegEx = /(?<=-)(\w+)/
const variableValueRegEx = /(?<=: )(.+)(?=" |)/
const propensionFields = ["PROPENSAO", "QTD", "NO"]
const nodeTypes = {
variable: "variable",
tag: "tag",
propension: "propension"
}
var tree = {
nextItems: []
}
class Node {
constructor(_value, _type, item) {
this.value = _value,
this.type = _type,
this.nextItems = item ? [item] : []
}
}
const getPropension = (obj) => {
const [key, value] = obj
if (propensionFields.includes(key)) return [key, value]
return []
}
const getVariableNameAndValue = (obj) => {
const [key, value] = obj
const variableName = value.match(variableRegEx)
const variableValue = value.match(variableValueRegEx)
if (!variableName || !variableValue) return []
return [variableName[0], variableValue[0]]
}
const verifyUpperCase = (value) => (value == value.toUpperCase())
const getLastItem = (obj) => {
if (obj.nextItems > 0) return getLastItem(obj.nextItems[0])
return obj.nextItems[0]
}
data.map((el, idx) => {
const objValues = Object.entries(el)
objValues.reduce((acc, current, currentidx, arr) => {
const [hasPropensionField, hasPropensionValue] = getPropension(current)
if (hasPropensionField && hasPropensionValue && acc && acc.type !== nodeTypes.propension) {
const propension = {}
let i = currentidx
while (i < arr.length) {
const [propensionField, propensionValue] = getPropension(arr[i])
propension[propensionField] = propensionValue
i+=1
}
const node = new Node(JSON.stringify(propension), nodeTypes.propension)
acc.nextItems.push(node)
return acc.nextItems[0]
}
const [variableName, variableValue] = getVariableNameAndValue(current)
if (!variableName || !variableValue) return
if (variableName && variableValue) {
const node = new Node(
variableName,
verifyUpperCase(variableName) ? nodeTypes.variable : nodeTypes.tag,
new Node(
variableValue,
verifyUpperCase(variableValue) ? nodeTypes.variable : nodeTypes.tag
)
)
const lastItem = getLastItem(node)
if (acc.nextItems.length > 0) {
if (acc.nextItems[acc.nextItems.length - 1].value == variableName) {
if (acc.nextItems[acc.nextItems.length - 1].nextItems[acc.nextItems[acc.nextItems.length - 1].nextItems.length - 1].value == variableValue) {
return acc.nextItems[acc.nextItems.length - 1].nextItems[acc.nextItems[acc.nextItems.length - 1].nextItems.length - 1]
}
acc.nextItems[acc.nextItems.length - 1].nextItems.push(node.nextItems[0])
return acc.nextItems[acc.nextItems.length - 1].nextItems[acc.nextItems[acc.nextItems.length - 1].nextItems.length - 1]
}
}
acc.nextItems.push(node)
return lastItem
}
}, tree)
})
return tree
}