如何使用node.js cdv解析器将csv数据之一放入变量中?
我正在尝试使用如何使用node.js cdv解析器将csv数据之一放入变量中?,node.js,csv,Node.js,Csv,我正在尝试使用node.js的CSV解析器从CSV中提取数据 readGreetingData的结果是: 应为:return='Good night' 实际值:return=blank 问题在于: const response显示在parser.on('end',()=>{方法中 但转义该方法后,const response变为空白 如何改进此功能 const fs = require('fs'); const csv = require('csv'); const path = re
node.js
的CSV解析器从CSV
中提取数据
readGreetingData
的结果是:
- 应为:
return='Good night'
- 实际值:
return=blank
问题在于:
const response
显示在parser.on('end',()=>{
方法中
- 但转义该方法后,
const response
变为空白
如何改进此功能
const fs = require('fs');
const csv = require('csv');
const path = require('path');
const filename = '../data/greeting.csv';
const greetingPath = path.join(__dirname, filename);
module.exports = class greeting {
constructor() {
this.whatTime = 'midnight';
this.greetingPattern = this.readGreetingData(this.whatTime);
console.log('this.greetingPattern= ' + this.greetingPattern);
}
//@param: whatTime --> 'midnight'
readGreetingData(whatTime) {
const parser = csv.parse({ columns: true });
const readableStream = fs.createReadStream(greetingPath, { encoding: 'utf-8' });
readableStream.pipe(parser);
const response = [];
let result = '';
let data;
parser.on('readable', () => {
while (data = parser.read()) {
}
});
parser.on('data', (data) => {
while (data = parser.read()) {
if (data['Time'] === whatTime) {
response.push(data.Greeting);
break;
}
}
});
parser.on('end', () => {
result = response[0];
console.log(result);
return result;
});
console.log(result);
return result;
}
}
CSV如下所示
"No","Time","Greeting"
"1","midnight","Good night"
提前感谢您!这个问题有两种解决方案,您可以使用异步/等待模式来解决这个问题,但是,只要文件不是海量的,根据您的需要使用同步API可能会更简单(异步构造函数不是一个好主意)
因此,您可以像这样完成您需要的:
const fs = require('fs');
const csv = require('csv/lib/sync');
const path = require('path');
const filename = '../data/greeting.csv';
const greetingPath = path.join(__dirname, filename);
module.exports = class greeting {
constructor() {
this.whatTime = 'midnight';
this.greetingPattern = this.readGreetingData(this.whatTime);
console.log('this.greetingPattern = ' + this.greetingPattern);
}
readGreetingData(whatTime) {
const records = csv.parse(fs.readFileSync(greetingPath), { columns: true });
const result = records.find(record => record.Time === whatTime);
return (result || {} ).Greeting;
}
}
感谢您友好地回答我的问题。我尝试了上述代码,但似乎显示了这样的消息:TypeError:records.find不是一个函数。您能告诉我如何修复此消息吗?除此之外,我认为我对node.js的理解还不够……如果您知道,您可以共享好书、文档或URL吗?嗨@Yoshi,谢谢你测试我的代码。我相信我们可以解决这个错误。你能确保你使用的是const csv=require('csv/lib/sync');而不是require('csv')吗,接口不同!有一些很棒的Node.js指南,W3Schools有一个:,还有官方文档:。还有:。如果我能给你一些建议,devs learning Node.js最大的问题就是语言的异步性。一旦你明白你会喜欢它的!嗨@Terry!它终于成功了!!!我真的很感激它。感谢您提供了大量有用的信息。我将利用您的信息努力学习。现在,我从理解JS异步和同步本质的区别开始。有一天,我想成为像您一样的开发人员!再次感谢:)嘿@Yoshi,没问题,祝你学习顺利!如果我能再给你一条建议:每天学习,你会越来越好。我从未停止过学习,也(希望)永远不会停止!