node官方文档

用于逐行读取文件流, 和终端交互

读取文件流

const fs = require('fs');
const readline = require('readline'); var rl = readline.createInterface({
input: fs.createReadStream('a.js'),
crlfDelay: Infinity
}); rl.on('line', lineFd =>{
console.log( lineFd);
}); // print
第一行
第2行
第3行
第4行

终端交互

const readline = require('readline');
const util = require('util'); const rl = readline.createInterface({input: process.stdin, output: process.stdout}); function random(min, max) {
return Math.random() * (max - min + 1)
} function logger(target, obj = {}) {
var inspect = util.inspect;
if (typeof obj === 'object') {
Object.assign(inspect.styles, obj);
} else {
Object.assign(inspect.styles, {
[typeof target]: obj
});
}
return inspect(target, {colors: true}).replace(/'/g, '');
} class flEvent {
constructor() {} // 流被暂停
pause() {
rl.on('pause', () => {});
} // 流被恢复
resume() {
rl.on('resume', () => {
this.downloadTimer = setInterval(() => this.downloadFeedback(), this.t);
});
}
} // 模拟下载文件
class Test extends flEvent {
constructor() {
super();
this.progress = 1;
this.downloadTimer;
this.t = 1000 * 1;
}
run() {
this.sigint();
this.pause();
this.resume(); this.hello();
} // 是否确定下载
hello() {
rl.question( logger('你确定下载这个文件吗? yes/no >', 'green'), data => {
if (this.isDownload(data)) {
rl.close();
} else {
this.downloading()
}
})
} // 下载中
downloading() {
rl.write(`开始下载! ${logger(this.progress, 'yellow')}% \n`);
// 每隔1秒 更与用户反馈
this.downloadTimer = setInterval(() => this.downloadFeedback(), this.t);
} // 监听ctrl+c的退出事件
sigint() {
rl.on('SIGINT', () => {
clearInterval(this.downloadTimer);
util.inspect.styles.string = 'red'
rl.question( logger("确定要退出下载吗?yes/no >", 'red'), data => {
rl.pause();
if (!this.isDownload(data)) {
rl.close(); // yes关闭流
return;
} else {
rl.resume(); // no重启流
}
});
});
}
downloadFeedback() {
var num = Math.floor(random(10, 20));
this.progress += num;
if (this.isDownloadOk(this.progress)) {
rl.write(`正在下载! ${logger('100', 'green')}% \n`);
rl.write( logger('全部下载完成!! ^_^', 'green') );
rl.close();
clearInterval(this.downloadTimer);
this.downloadTimer = num = null;
return;
}
rl.write(`正在下载! ${logger(this.progress, 'yellow')}% \n`);
} isDownload(data) {
if (data.match(/^y(es)?$/i)) {
return false;
} else {
return true;
}
} isDownloadOk(num) {
if (num >= 100) {
return true;
} else {
return false;
}
}
} var test = new Test();
test.run();

node_readline (逐行读取)的更多相关文章

  1. android逐行读取文件内容以及保存为文件

    用于长时间使用的apk,并且有规律性的数据 1,逐行读取文件内容 //首先定义一个数据类型,用于保存读取文件的内容 class WeightRecord { String timestamp; flo ...

  2. python中逐行读取文件的最佳方式_Drupal_新浪博客

    python中逐行读取文件的最佳方式_Drupal_新浪博客 python中逐行读取文件的最佳方式    (2010-08-18 15:59:28)    转载▼    标签:    python   ...

  3. php逐行读取txt文件写入数组的方法

    使用说明: 采用fopen 方法,逐行读取数据,并使用feof($fp)  判断是否文件截止,最后通过filter() 方法,去除空白行,得到所需数据 $file = fopen("user ...

  4. Node.js 逐行读取

    逐行读取 稳定性: 2 - 不稳定 使用 require('readline'),可以使用这个模块.逐行读取(Readline)可以逐行读取流(比如process.stdin) 一旦你开启了这个模块, ...

  5. 别再用"while (!feof(file))"来逐行读取txt文件了!

    起因 执行一个C/C++程序出现segment fault.它逐行读取文本文件,每一行是一个图片名字,然后读图.处理图像,etc. 发现最后一次读取的文件名不存在(空的). 正确的逐行读取txt文件 ...

  6. python文件逐行读取四种方法

    下面是四种Python逐行读取文件内容的方法, 并分析了各种方法的优缺点及应用场景,以下代码在python3中测试通过, python2中运行部分代码已注释,稍加修改即可. 方法一:readline函 ...

  7. 用python从符合一定格式的txt文档中逐行读取数据并按一定规则写入excel(openpyxl支持Excel 2007 .xlsx格式)

    前几天接到一个任务,从gerrit上通过ssh命令获取一些commit相关的数据到文本文档中,随后将这些数据存入Excel中.数据格式如下图所示 观察上图可知,存在文本文档中的数据符合一定的格式,通过 ...

  8. PHP逐行读取数据

    PHP逐行读取数据 <?php $file = fopen("Minot.txt", "r") or exit("Unable to open ...

  9. 【Node.js】'readline' 逐行读取、写入文件内容

    [转]运用readline逐行读取的两种实现 效果图如下: 左边1.log 为源文件 右边1.readline.log为复制后的文件 下边为命令行输出 实现方式一: [javascript] view ...

随机推荐

  1. vim IDE配置

    参考: http://www.cnblogs.com/witcxc/archive/2011/12/28/2304704.html http://www.cnblogs.com/ma6174/arch ...

  2. JAVA中通过JavaCV实现跨平台视频/图像处理-调用摄像头

    一.简介 JavaCV使用来自计算机视觉领域(OpenCV, FFmpeg, libdc1394, PGR FlyCapture, OpenKinect, librealsense, CL PS3 E ...

  3. Oracle更改redo log大小 or 增加redo log组

    (1)redo log的大小可以影响 DBWR 和 checkpoint : (2)arger redo log files provide better performance. Undersize ...

  4. wine qq 2013 for linux deb包 Ubuntu 64位兼容

    2013-08-08     Wine 1.6,如果您想体验下该版本的wine,目前可以通过ppa进行安装:   sudo add-apt-repository ppa:ubuntu-wine/ppa ...

  5. nodeJS服务器的创建和重新启动

    一: 首先在nodejs项目里创建一个server.js文件,输入下面代码 var http = require("http"); http.createServer(functi ...

  6. CentOS下网卡启动、配置等ifcfg-eth0教程(转)

    步骤1.配置/etc/sysconfig/network-scripts/ifcfg-eth0 里的文件.it动力的CentOS下的ifcfg-eth0的配置详情: [root@localhost ~ ...

  7. 各种软件的安装教程centos mysql tomcat nginx jenkins jira 等等

    464  Star3,606 Fork 1,460 judasn/Linux-Tutorial 作者: https://github.com/judasn Linux-Tutorial/markdow ...

  8. JS模块化:CommonJS和AMD(Require.js)

    早期的JS中,是没有模块化的概念的,这一情况直到09年的Node.js横空出世时有了好转,Node.js将JS作为服务端的编程语言,使得JS不得不寻求模块化的解决方案. 模块化概念 在JS中的模块是针 ...

  9. 9-9-B+树-查找-第9章-《数据结构》课本源码-严蔚敏吴伟民版

    课本源码部分 第9章  查找 - B+树 ——<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接☛☛☛ <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题 ...

  10. 微信小程序--兼容

    小程序的功能不断的增加,但是旧版本的微信客户端并不支持新功能,所以在使用这些新能力的时候需要做兼容. 文档会在组件,API等页面描述中带上各个功能所支持的版本号. 可以通过 wx.getSystemI ...