Javascript 如何将文件的每一行传输到数组单元格?
我尝试读取一个id为的文件,并将其作为数组返回。每行包含一个id。我想将每个id传输到一个数组单元格。这是我的密码:Javascript 如何将文件的每一行传输到数组单元格?,javascript,node.js,Javascript,Node.js,我尝试读取一个id为的文件,并将其作为数组返回。每行包含一个id。我想将每个id传输到一个数组单元格。这是我的密码: var fs = require('fs'); var reader = fs.createReadStream('RTIdList.js', {encoding: 'utf8'}); reader.once( 'end' , function () { console.log( 'Read completed successfully.' ); }); var
var fs = require('fs');
var reader = fs.createReadStream('RTIdList.js', {encoding: 'utf8'});
reader.once( 'end' , function () {
console.log( 'Read completed successfully.' );
});
var lineReader = require('readline').createInterface({
input: reader,
});
function RTIdReader(){
var arrayPos = 0;
var idArray = new Array();
lineReader.on('line', function (line) {
console.log('Line from file:', line);
idArray[arrayPos] = line;
arrayPos++;
});
console.log('idArray[0]: '+idArray[0]);
return idArray;
}
RTIdReader();
你知道我做错了什么吗?这怎么可能是正确的呢
@德拉卡桑:代码一直工作到填充数组。我无法console.log或返回数组。代码在lineReader.on之后停止
大约两个星期以来,我一直在为电话回电而苦苦挣扎。猜猜,我不明白他们的意思。这是我的尝试:
var fs = require('fs');
function RT(idList){
console.log('RT works');
}
function idList(){
var idArray = new Array();
var reader = fs.createReadStream('RTIdList.js', {encoding: 'utf8'});
reader.once( 'end' , function () {
console.log( 'Read completed successfully.' );
});
var lineReader = require('readline').createInterface({
input: reader,
});
return {
lineReader.on('line', function (line) {
console.log('Line from file:', line);
idArray.push(line);
return idArray;
}
}
}
RT();
为什么我的回调不起作用
好的,回到开始。这就是我开始的
var fs = require('fs');
var idArray = new Array();
var reader = fs.createReadStream('RTIdList.js', {encoding: 'utf8'});
reader.once( 'end' , function () {
console.log( 'Read completed successfully.' );
});
var lineReader = require('readline').createInterface({
input: reader,
});
lineReader.on('line', function (line) {
console.log('Line from file:', line);
idArray.push(line);
});
除了回调,我必须在何处以及如何执行?使用
push
将数据添加到数组中时,您的做法是以类似数组的方式将属性添加到对象中。差别很小,但以后可能会咬你的屁股
检查文档以了解如何使用它,您根本不需要读者
返回的时间与代码开始读取文件的时间相同,您需要检查异步函数的工作方式
工作代码提示:
您根本不需要fs.createReadStream
包含数组中所有ID的回调将位于.on('close',function(){/*here*/})中代码>
编辑:
在javascript中,可以将函数作为参数传递,并创建匿名函数
因此,在异步代码中不使用return
,而是将代码的其余部分作为参数传递,按照惯例,参数名为callback
至于如何使用readline读取文件,一个很好的例子是,它可以在不到5分钟的时间内转换为您的用例
编辑:
好的,我花了时间来编写代码
(arg)=>{}
与函数(arg){}
const readline = require('readline');
const fs = require('fs');
function RT(file, callback) {
let idArray = []; //Declare idArray
const rl = readline.createInterface({ //Set and start readline
input: fs.createReadStream(file)
});
rl.on('line', (line) => { //For each line
console.log('Line from file:', line);
idArray.push(line); //Add it to the array
});
rl.on('close', () => { //At the end of the file
callback(idArray); //Call the rest of the code
});
}
RT('RTIdList.js', (idArray) => {
console.log('Here is the idArray: ' + idArray);
});
代码有效吗?如果不是,它应该做什么/不做什么/不做什么?而不是idArray[arrayPos]=line;arrayPos++
您只需执行idArray.push(line)
,这更容易阅读,也更不容易出错。这是异步函数的一个问题,在读取文件之前,console.log execute wayyyy。谢谢:我曾尝试将返回值放入函数(line){…},但它在第一轮返回数组。你知道我该怎么写吗?谢谢,我试着和callback合作。请看一看,我的代码有什么问题。@NewbieXXL:不,您没有以异步代码返回,请查看我提供的链接,它可以很容易地编辑以将数据推送到数组中,然后您只需要添加一个回调就可以了。我从这个示例开始。但是,由于缺乏经验,我无法根据自己的意愿转换此代码。@NewbieXXL:我花了时间给你代码,研究它,试图了解发生了什么,为什么以及如何工作,并与你的代码进行比较。您需要尽快找到一门关于异步编程和回调的课程。非常感谢您,DrakaSAN。我会研究代码的!顺便问一下,“=>”是什么命令?我想,我已经找到了答案。“=>”代表函数。对吗?