我当前正在处理一个提取csv文件最后几行的脚本。最后一行包含温度。我想将file1的温度添加到file2的温度以计算平均温度。到目前为止,这是代码:
var fs = require('fs');
var csv = require('csv');
var handler = function(err, data) {
if (err) throw err;
var avgtemp = []
var lines = data.trim().split('\n');
var lastLine = lines.slice(-1)[0];
var fields = lastLine.split(',');
var humidity = fields.slice(-1)[0];
var temperature = fields.slice(-2)[0]
var doe = avgtemp.push(parseFloat(temperature))
console.log(avgtemp)
}
fs.readFile('datafile1.csv', 'utf-8', handler)
fs.readFile('datafile2.csv', 'utf-8', handler)
现在,当控制台日志返回以下内容时:
[ 24.57083333333333 ]
[ 20.57083333333333 ]
我希望它看起来像这样:
[24.57083333333333, 20.57083333333333]
我已经尝试了多种方法,但是我做对了。先感谢您。
答案 0 :(得分:1)
由于两个请求都没有以任何方式链接并且是异步的,因此一旦读取了两个文件,就必须手动对数据进行分组。
我通常使用util.promisify()
来使fs.readFile()
从接受回调的返回承诺的返回,所以一旦两个文件都被读取,我就可以使用Promise.all()
创建数组:>
var fs = require('fs');
var csv = require('csv');
var { promisify } = require( 'util' );
var readFile = promisify( fs.readFile );
Promise
.all([
readFile( 'datafile1.csv' ),
readFile( 'datafile2.csv' )
])
.then( files => files.map( data => {
var lines = data.trim().split('\n');
var lastLine = lines.slice(-1)[0];
var fields = lastLine.split(',');
var humidity = fields.slice(-1)[0];
var temperature = fields.slice(-2)[0];
return parseFloat( temperature );
}))
// Temperatures should equal [24.57083333333333, 20.57083333333333]
.then( temperatures => console.log( temperatures ))
.catch( error => {
// Handle error.
console.error( error );
});
答案 1 :(得分:0)
问题出在这一行:
var avgtemp = []
您将avgtemp设置为两个“ readFile”中的一个空数组。
如果您希望它既存储又存储,请像这样修改脚本:
var fs = require('fs');
var csv = require('csv');
var avgtemp = []
var handler = function(err, data) {
if (err) throw err;
var lines = data.trim().split('\n');
var lastLine = lines.slice(-1)[0];
var fields = lastLine.split(',');
var humidity = fields.slice(-1)[0];
var temperature = fields.slice(-2)[0]
var doe = avgtemp.push(parseFloat(temperature))
console.log(avgtemp)
}
fs.readFile('datafile1.csv', 'utf-8', handler)
fs.readFile('datafile2.csv', 'utf-8', handler)
答案 2 :(得分:-1)
您必须在函数外部定义数组。
var avgtemp = []
应该在全局级别,而不是在函数内部