是否可以从node.js中的stdin同步读取?因为我正在用JavaScript编写一个关于JavaScript编译器的脑筋(只是为了好玩).Brainfuck支持需要同步实现的读取操作.
我试过这个:
const fs = require('fs');
var c = fs.readSync(0,1,null,'utf-8');
console.log('character: '+c+' ('+c.charCodeAt(0)+')');
Run Code Online (Sandbox Code Playgroud)
但这只产生这个输出:
fs:189
var r = binding.read(fd, buffer, offset, length, position);
^
Error: EAGAIN, Resource temporarily unavailable
at Object.readSync (fs:189:19)
at Object.<anonymous> (/home/.../stdin.js:3:12)
at Module._compile (module:426:23)
at Module._loadScriptSync (module:436:8)
at Module.loadSync (module:306:10)
at Object.runMain (module:490:22)
at node.js:254:10
Run Code Online (Sandbox Code Playgroud) 我需要使用Node.js以下列格式逐行解析文件:
13
13
0 5
4 3
0 1
9 12
6 4
5 4
0 2
11 12
9 10
0 6
7 8
9 11
5 3
Run Code Online (Sandbox Code Playgroud)
它代表一个图表.前两行是边和顶点的数量,后面是边.
我可以通过以下方式完成任务:
var fs = require('fs');
var readline = require('readline');
var read_stream = fs.createReadStream(filename);
var rl = readline.createInterface({
input: read_stream
});
var c = 0;
var vertexes_number;
var edges_number;
var edges = [];
rl.on('line', function(line){
if (c==0) {
vertexes_number = parseInt(line);
} else if (c==1) {
edges_number = parseInt(line);
} else …Run Code Online (Sandbox Code Playgroud) 我有一个大文件(utf8).我知道fs.createReadStream可以创建流来读取大文件,但不能同步.所以我尝试使用fs.readSync,但读取文本就像打破了"??".
var fs = require('fs');
var util = require('util');
var textPath = __dirname + '/people-daily.txt';
var fd = fs.openSync(textPath, "r");
var text = fs.readSync(fd, 4, 0, "utf8");
console.log(util.inspect(text, true, null));
Run Code Online (Sandbox Code Playgroud) 正如标题所述,我想知道是否可以在 node.js 中使用promisify(https://nodejs.org/dist/latest-v8.x/docs/api/util.html#util_util_promisify_original)readline?我只能这样做:
let data = [];
const parse = () => {
return new Promise((resolve, reject) => {
const rl = readline.createInterface({
input: fs.createReadStream(path)
});
rl.on('line', (line) => {
data.push(line);
});
rl.on('close', () => {
resolve(data);
});
});
};
Run Code Online (Sandbox Code Playgroud) 我试图在NodeJS中创建一个脚本,它返回文本文件的前两行.
我目前正在使用此代码:
// content of index.js
const fs = require('fs')
const readline = require('readline');
const http = require('http')
const port = 8080
String.prototype.beginsWith = function (string) {
return(this.indexOf(string) === 0);
};
const requestHandler = (request, response) => {
console.log(request.url)
if (request.url == "/newlines") {
filename = "allnames.txt"
readline.createInterface({
input: fs.createReadStream(filename),
output: process.stdout
})
response.end('Hello Node.js Server!')
}
else {
response.end('Go away!')
}
}
const server = http.createServer(requestHandler)
server.listen(port, (err) => {
if (err) {
return console.log('something bad happened', err)
} …Run Code Online (Sandbox Code Playgroud)