在一個目錄中有多個具有不同擴展名的檔案。我必須找到并選擇 .txt 檔案,從這些所有 .txt 檔案中,我必須用新詞替換一些詞。
比如說,我目錄中的 4 個檔案是:
File1.txt
File2.txt
File3.txt
File4.txt
現在我必須replace word 'mobile' to 'laptop' from all .txt files
我不得不再次replace word 'School' to 'College' from all txt.files
然后再次replace word 'banana' to 'Mango' from all txt.files
和then save the file.
const path = require('path')
const fs = require('fs')
const dirpath = path.join(__dirname, '/')
fs.readdir(dirpath, function(err, files) {
const Files = files.filter(el => path.extname(el) === '.txt')
for (let i=0; i < Files.length; i ) {
console.log(Files[i])
var fs = require('fs')
fs.readFile(Files[i], 'utf8', function (err,data) {
if (err) {
return console.log(err);
}
var result = data.replace(/mobile/g, 'laptop');
fs.writeFile(Files[i], result, 'utf8', function (err) {
if (err) return console.log(err);
});
var result2 = data.replace(/School/g, 'College');
fs.writeFile(Files[i], result2, 'utf8', function (err) {
if (err) return console.log(err);
});
});
}
當我運行這個程式時,只有第二個替換部分在作業,我該怎么辦!
uj5u.com熱心網友回復:
通過做
var result = data.replace(/mobile/g, 'laptop');
fs.writeFile(Files[i], result, 'utf8', function (err) {
if (err) return console.log(err);
});
var result2 = data.replace(/School/g, 'College');
fs.writeFile(Files[i], result2, 'utf8', function (err) {
if (err) return console.log(err);
});
你是
- 首先,將第一個替換的文本保存到檔案中
- 然后,用第二個字串替換原始文本,并將其保存到檔案中
不確定第一次寫入要達到什么目的 - 如果您真的想要兩個writeFiles,您需要等待第一個完成,然后readFile再次呼叫以獲取新內容,然后呼叫.replace該內容。但是為什么不首先writeFile完全放棄它并使用您已經參考的字串呢?(不要替換data原始字串,而是result第一次替換的結果 - 或者,根本不創建中間變數)
fs.readFile(Files[i], 'utf8', function (err, data) {
if (err) {
return console.log(err);
}
const result = data
.replace(/mobile/g, 'laptop')
.replace(/School/g, 'College');
fs.writeFile(Files[i], result, 'utf8', function (err) {
if (err) return console.log(err);
});
});
如果您想在所有檔案都被替換時有一個指示器,請使用fs.promisesAPI 而Promise.all不是基于回呼的 API。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/493322.html
標籤:节点.js
