我目前正在编写一个提取 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]
我尝试了很多东西,但我不能做对。先感谢您。
由于这两个请求没有以任何方式链接并且是异步的,因此您必须在读取两个文件后手动对数据进行分组。
我通常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 );
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句