本篇文章主要介紹了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] } } } * **/
上面是我整理給大家的,希望今後對大家有幫助。
相關文章:
vue輪播圖外掛程式vue-concise-slider的使用
以上是在Node.js中如何使用readline模組與util模組的詳細內容。更多資訊請關注PHP中文網其他相關文章!

JavaScript在現實世界中的應用包括前端和後端開發。 1)通過構建TODO列表應用展示前端應用,涉及DOM操作和事件處理。 2)通過Node.js和Express構建RESTfulAPI展示後端應用。

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

Python和JavaScript在社區、庫和資源方面的對比各有優劣。 1)Python社區友好,適合初學者,但前端開發資源不如JavaScript豐富。 2)Python在數據科學和機器學習庫方面強大,JavaScript則在前端開發庫和框架上更勝一籌。 3)兩者的學習資源都豐富,但Python適合從官方文檔開始,JavaScript則以MDNWebDocs為佳。選擇應基於項目需求和個人興趣。

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

記事本++7.3.1
好用且免費的程式碼編輯器

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

Dreamweaver CS6
視覺化網頁開發工具