在Node.js中如何使用readline模块与util模块
本篇文章主要介绍了Node.js readline模块与util模块的使用,现在分享给大家,也给大家做个参考。
1. 使用readline模块逐行读取流数据
1.1. 创建Interface对象
在readline模块中,通过Interface对象的使用来实现逐行读取流数据的处理。因此首先要创建Interface对象,在readline模块中,可以通过createInterface方法来创建Interface对象.readline.createInterface(options),options为一个对象,属性如下
input: 属性值为一个可用来读取流数据的对象,用于指定读入数据的来源。
output: 属性值为一个可用来写入流数据的对象,用于指定数据的输出目标。
computer: 属性值为一个函数,用于指定Tab补全处理。函数的参数值被自动设定为从该行中读入的Tab字符之前的数据,该函数应该返回一个由所有用于Tab补全时的匹配字符串组成的数组以及从该行中读入的Tab字符之前的数据。
terminal: 该属性为一个布尔类型的属性,当需要像一个终端那样实时地将输入数据流进行输出,且需要在输出数据中写入ANSI/VT100控制字符串时,需要将该属性值设置为true,默认属性值等于output属性值对象的isTTY属性值。
// 输入 exit, quit,q这三个任意之一的时候,会退出 const readline = require('readline'); let rl = readline.createInterface({ input: process.stdin, output: process.stdout, completer: completer }); rl.on('line', (line) => { if (line === 'exit' || line === 'quit' || line === 'q') { rl.close(); } else { console.log('您输入了:', line); } }); rl.on('close', () => { console.log('行数据读取操作被终止'); }); function completer(line) { const completions = '.help .error .exit .quit .q'.split(' '); let hits = completions.filter((c) => { return c.indexOf(line) === 0; }); return [hits.length ? hits : completions, line] }
1.2. 使用Interface对象逐行读取文件
原fs.js文件的内容
console.log('this is line 1'); console.log('this is line 2'); console.log('this is line 3'); console.log('this is line 4'); console.log('this is line 5');
代码内容
const readline = require('readline'); const fs = require('fs'); let file = fs.createReadStream('./fs.js'); let out = fs.createWriteStream('./anotherFs.js'); let index = 1; out.write('/*line' + index.toString() + ": */"); let rl = readline.createInterface({ input: file, output: out, terminal: true }); rl.on('line', (line) => { if (line === '') { rl.close(); } else { index++; out.write('/*line' + index.toString() + ': */'); } });
生成的anotherFs.js文件的内容
/*line1: */console.log('this is line 1'); /*line2: */console.log('this is line 2'); /*line3: */console.log('this is line 3'); /*line4: */console.log('this is line 4'); /*line5: */console.log('this is line 5');/*line6: */
2. 使用util模块中提供的一些方法
+format方法
类似于C语言中的printf方法,将第一个参数值作为一个格式化字符串,将其他参数值作为该格式化字符串中所使用的各中参数,返回一个经过格式化处理后的字符串.util.format('您输入了%d个参数,参数值分别为%s,%s,%s',3,'nice','excelent','holy');
格式化字符串中,可以使用的参数指定符号
*`%s`:用于指定字符串参数
*`%d`:用于指定数值参数,包括整数及浮点数
*`%j`:用于指定一个`JSON`对象
*`%%`:用于指定一个百分号
*如果格式化字符串中使用的参数个数多于format方法中使用的除了`format`参数之外的其他参数,则格式化字符串中多于的参数将不被替换.`console.log(util.format('%s:%s','one'));`
*如果格式化字符串中使用的参数个数少于`format`方法中使用的除了`format`参数之外的其他参数,则根据`format`方法中多于参数值的类型自动将其转换为字符串,中间使用一个空格进行分割.
+inspect(object,[options])返回一个字符串,该字符串包含了对象的信息,在调试应用程序的过程中非常有用.
*`showHidden
`如果为`true`,则`object`的不可枚举的符号与属性也会被包括在格式化后的结果中.默认为`false.` *`depth
`指定格式化`object`时递归的次数.这对查看大型复杂对象很有用.默认为`2`.若要无限地递归则传入`null`. *`colors
`如果为`true`,则输出样式使用`ANSI`颜色代码.默认为`false`.颜色可自定义. *`customInspect
`如果为`false`,则`object`上自定义的`inspect(depth,opts)`函数不会被调用.默认为`true`. *`showProxy
`如果为`true`,则`Proxy`对象的对象和函数会展示它们的`target`和`handler`对象.默认为`false`. *`maxArrayLength
`指定格式化时数组和`TypedArray`元素能包含的最大数量.默认为`100`.设为`null`则显式全部数组元素.设为`0*`或负数则不显式数组元素. *`breakLength
`一个对象的键被拆分成多行的长度.设为`Infinity`则格式化一个对象为单行.默认为`60`.
+自定义util.inspect颜色
可以通过util.inspect.styles和util.inspect.colors属性全局地自定义util.inspect的颜色输出(如果已启用)
const util = require('util'); console.log(util.format('您输入了%d个参数,参数值分别为%s,%s,%s', 3, 'nice', 'excelent', 'holy')); //您输入了3个参数,参数值分别为nice,excelent,holy console.log(util.format('一个JSON对象%j', {'name': 'jack', 'age': 25})); // 一个JSON对象{"name":"jack","age":25} console.log(util.format('一个百分号%'));// 一个百分号% console.log(util.format('%s:%s', 'one'));// one:%s console.log(util.format('%s', 'one', 'two', 'three', {'name': 'jack'})); function test(one, two) { return one + two; } let parent = new Object(); parent.name = 'parent'; parent.func = test; let child1 = new Object(); child1.name = 'child1'; parent.child1 = child1; let child2 = new Object(); child2.name = 'child2'; child1.child = child2; let child3 = new Object(); child3.name = 'child3'; child2.child = child3; child2.inspect = function (depth) { return util.inspect(this, {depth: depth - 2, customInspect: false}) }; console.log(util.inspect(parent, {customInspect: true, depth: 4})); /** * { name: 'parent', * func: [Function: test], * child1: * { name: 'child1', * child: { name: 'child2', child: [Object], inspect: [Function] } } } * **/
上面是我整理给大家的,希望今后会对大家有帮助。
相关文章:
以上是在Node.js中如何使用readline模块与util模块的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

如何使用WebSocket和JavaScript实现在线语音识别系统引言:随着科技的不断发展,语音识别技术已经成为了人工智能领域的重要组成部分。而基于WebSocket和JavaScript实现的在线语音识别系统,具备了低延迟、实时性和跨平台的特点,成为了一种被广泛应用的解决方案。本文将介绍如何使用WebSocket和JavaScript来实现在线语音识别系

WebSocket与JavaScript:实现实时监控系统的关键技术引言:随着互联网技术的快速发展,实时监控系统在各个领域中得到了广泛的应用。而实现实时监控的关键技术之一就是WebSocket与JavaScript的结合使用。本文将介绍WebSocket与JavaScript在实时监控系统中的应用,并给出代码示例,详细解释其实现原理。一、WebSocket技

如何利用JavaScript和WebSocket实现实时在线点餐系统介绍:随着互联网的普及和技术的进步,越来越多的餐厅开始提供在线点餐服务。为了实现实时在线点餐系统,我们可以利用JavaScript和WebSocket技术。WebSocket是一种基于TCP协议的全双工通信协议,可以实现客户端与服务器的实时双向通信。在实时在线点餐系统中,当用户选择菜品并下单

如何使用WebSocket和JavaScript实现在线预约系统在当今数字化的时代,越来越多的业务和服务都需要提供在线预约功能。而实现一个高效、实时的在线预约系统是至关重要的。本文将介绍如何使用WebSocket和JavaScript来实现一个在线预约系统,并提供具体的代码示例。一、什么是WebSocketWebSocket是一种在单个TCP连接上进行全双工

JavaScript和WebSocket:打造高效的实时天气预报系统引言:如今,天气预报的准确性对于日常生活以及决策制定具有重要意义。随着技术的发展,我们可以通过实时获取天气数据来提供更准确可靠的天气预报。在本文中,我们将学习如何使用JavaScript和WebSocket技术,来构建一个高效的实时天气预报系统。本文将通过具体的代码示例来展示实现的过程。We

JavaScript教程:如何获取HTTP状态码,需要具体代码示例前言:在Web开发中,经常会涉及到与服务器进行数据交互的场景。在与服务器进行通信时,我们经常需要获取返回的HTTP状态码来判断操作是否成功,根据不同的状态码来进行相应的处理。本篇文章将教你如何使用JavaScript获取HTTP状态码,并提供一些实用的代码示例。使用XMLHttpRequest

用法:在JavaScript中,insertBefore()方法用于在DOM树中插入一个新的节点。这个方法需要两个参数:要插入的新节点和参考节点(即新节点将要被插入的位置的节点)。

JavaScript中的HTTP状态码获取方法简介:在进行前端开发中,我们常常需要处理与后端接口的交互,而HTTP状态码就是其中非常重要的一部分。了解和获取HTTP状态码有助于我们更好地处理接口返回的数据。本文将介绍使用JavaScript获取HTTP状态码的方法,并提供具体代码示例。一、什么是HTTP状态码HTTP状态码是指当浏览器向服务器发起请求时,服务
