返回从CSV解析器创建的词典



我正在尝试从下面的csv文件中提取字典数据,如{Name:Value,Name2:Value2,…}

<metadata>
<metadata>
<metadata>
<metadata>
ID,1,2,3,4,5,6,...
Name,ABC,BCD,CDE,DEF,EFG,FGH,...
Val,123,234,345,456,567,678,...

使用下面的功能

async function getMap(file) {
rv = {};
fs.createReadStream(file)
.pipe(csv.parse({from_line: 5, to_line:7, columns: true, bom: true}, (err, data) => {
for(i=1;i<=200;i++) {
rv[data[0][i]] = data[1][i];
}
}));
return rv;
}

我想这会返回如下内容:

{'ABC':123,'BCD':234,...}

但返回了空值。我确信这与范围有关(如果这个词正确的话(,但我还没弄清楚。

==========================
起初我认为这与范围有关,但我越仔细研究结果,就越不了解异步问题。这怎么能使用等待、承诺、解析等方法等待readStream处理到文件末尾呢?

我测试了下面的代码,它生成了所需的映射。

如果我们得到一个错误,我会调用reject(err(,所以应该正确地传播它。如果解析成功,我们将使用所需的映射调用resolve。

const csv = require('csv');
const fs = require("fs");
function getMap(file) {
return new Promise((resolve, reject) => { 
fs.createReadStream(file)
.pipe(csv.parse({from_line: 6, to_line: 7, columns: true, bom: true}, (err, data) => {
if (err) {
reject(err);
} else {
resolve(data[0]);
}
}));
})
}
async function testGetMap() {
try { 
const map = await getMap("./map-input.csv");
console.log("testGetMap: map:")
console.table(map);
} catch (error) { 
console.error("testGetMap: An error occurred:", error);
}
}
testGetMap();

地图输入.csv

<metadata>
<metadata>
<metadata>
<metadata>
ID,1,2,3,4,5,6,...
Name,ABC,BCD,CDE,DEF,EFG,FGH
Val,123,234,345,456,567,678

输出看起来是这样的:

{
Name: 'Val',
ABC: '123',
BCD: '234',
CDE: '345',
DEF: '456',
EFG: '567',
FGH: '678'
}

最新更新