Я пытаюсь написать функцию, которая принимает текстовый файл в качестве ввода и преобразует его в древовидный формат JSON, чтобы я мог использовать его в своем проекте d3. js.
Текст Файл действительно прост: каждая строка, начинающаяся с 'b', представляет мешок, а следующее целое число - номер пакета. Каждая сумка содержит узлы.
Таким образом, первая строка - это сумка 1 с узлами 1 и 2. Строки, которые не содержат b, представляют собой связи между сумками. Так, например, мешок 1 указывает на мешок 2.
Пример ввода:
b 1 1 2 3
b 2 2 3 4
b 3 4 5 6
1 2
1 3
Ожидаемый результат:
const tree = {
id: 1,
name: '1, 2, 3',
vertices: [1, 2, 3],
children: [
{
id: 2,
name: '2, 3, 4',
vertices: [2, 3, 4],
},
{
id: 3,
name: '4, 5, 6',
vertices: [4, 5, 6],
},
],
};
код на данный момент (помощь Тома):
function readTreeInput(evt) {
const file = evt.target.files[0];
const fileReader = new FileReader();
fileReader.onload = function convertTreeToJSON() {
const lines = this.result.split('\n');
const res = {}; let current = res;
for (let line = 0; line < lines.length; line++) {
const textLine = lines[line];
if (textLine.startsWith('c') || textLine.startsWith('s')) continue;
if (textLine.startsWith('b')) {
const bagId = parseInt(textLine[2], 10);
const firstNode = textLine[4];
const secondNode = textLine[6];
const thirdNode = textLine[8];
let vertices;
if (secondNode === undefined) {
vertices = [firstNode];
} else if (thirdNode === undefined) {
vertices = [parseInt(firstNode, 10), parseInt(secondNode, 10)];
} else {
vertices = [firstNode, secondNode, thirdNode];
}
current.id = bagId;
current.name = vertices.join(', '); // bagLabel;
current.vertices = vertices;
current = (current.children = [{}])[0];
}
}
removeExistingTree();
drawTree(res);
};
fileReader.readAsText(file);
}
Не совсем уверен, как go отсюда позаботиться о вложенности, какой-нибудь совет? :)