async function tidy(file, template) {
const text = await file.text();
const lines = text.split("\n").filter(l => {
const year = +l.slice(11, 15);
return true;
});
const melted = lines.flatMap(l => {
const year = l.slice(11, 15);
const month = l.slice(15, 17);
const element = l.slice(17, 21);
const values = l.slice(21, 26);
return days.map((day, i) => ({
date: `${year}-${month}-${String(day).padStart(2, '0')}`,
element,
value: +l.slice(21 + i * 8, 26 + i * 8)
}));
});
return Array.from(
melted
.reduce((map, { date, element, value }) => {
if (value === -9999) return map;
const row = map.get(date) || { ...template, date };
row[element] = value;
return map.set(date, row);
}, new Map())
.values()
);
}