У меня большие объемы данных, текстовые файлы с разделителями каналов, которые я загружаю в d3.Объем данных настолько велик, что я разбил файлы на множество файлов по 10 000 строк.Ранее я мог использовать d3.queue + d3.text (), а затем объединить его в строку, которую я затем передал с d3.dsv.Примерно так:
d3.queue()
.defer(d3.text, "/data/headers.txt")
.defer(d3.text, "/data/batch1.txt")
.defer(d3.text, "/data/batch2.txt")
.await(function(error, file1, file2, file3) {
if (error) {
console.error('Oh dear, something went wrong: ' + error);
} else {
var allData = file1 + file2 + file3;
var psv = d3.dsvFormat("|");
var parsedData = psv.parse(allData);
}
});
Это сработало хорошо, но d3.queue был удален, а d3.text теперь подкреплен Promises и fetch (https://github.com/d3/d3/blob/master/CHANGES.md). Загрузка нескольких файлов выполняется с помощью promises.all.
Promise.all([
d3.text('/data/out1.csv'),
d3.text('/data/batch1.csv'),
d3.text('/data/batch2.csv')
])
.then((vals) => {
let allData;
vals.forEach(d => {
allData = allData + d;
});
var psv = d3.dsvFormat("|");
var parsedData = psv.parse(allData);
});
Кажется, это работает, но теперь у меня возникла проблема с кодировкой, которой у меня не было прежде, так как оказалось, что эти данные находятся в UTF-16 LE (я думаю). Предыдущая версияиз d3.text () обработал кодировку, но теперь у меня есть эти - �� - обнаружение повсюду, и окончания строк не анализируются должным образом, в результате чего каждая вторая строка результирующих данных содержит все «неопределенные» значения.
После некоторого копания я пытаюсь передать объект init для получения:
d3.text("/data/headers.csv", { headers: { "Content-Type": "text/html, charset=UTF-16" } }).then(function(text) {
console.log(text);
});
Но это не имеет значения. Любая помощь очень ценится.