第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

節(jié)點 - 從大文件中刪除子字符串

節(jié)點 - 從大文件中刪除子字符串

HUH函數(shù) 2022-09-29 17:12:46
我需要從文件中刪除子字符串(僅出現(xiàn)在文件的特定已知行中)。有一些簡單的解決方案是將所有文件數(shù)據(jù)讀取到字符串,刪除子字符串,然后將固定數(shù)據(jù)寫入文件。這是我在這里找到的代碼:節(jié)點 js - 從文本文件中刪除字符串var data = fs.readFileSync('banlist.txt', 'utf-8');var newValue = data.replace(new RegEx("STRING_TO_REMOVE"), '');fs.writeFileSync('banlist.txt', newValue, 'utf-8');我的問題是,文件很大 - 多達(dá)十億行日志,所以我無法將所有內(nèi)容讀取到內(nèi)存中。
查看完整描述

4 回答

?
慕田峪7331174

TA貢獻(xiàn)1828條經(jīng)驗 獲得超13個贊

為什么不是一個簡單的轉(zhuǎn)換流和? 可以將回調(diào)作為第二個參數(shù),即 如果您需要替換單詞而不是完全刪除它們。replace()replace.replace(/bad1|bad2|bad3/g, filterWords)


const fs = require("fs")

const { pipeline, Transform } = require("stream")

const { join } = require("path")


const readFile = fs.createReadStream("./words.txt")

const writeFile = fs.createWriteStream(

  join(__dirname, "words-filtered.txt"),

  "utf8"

)


const transformFile = new Transform({

  transform(chunk, enc, next) {

    let c = chunk.toString().replace(/bad/g, "replaced")

    this.push(c)

    next()

  },

})


pipeline(readFile, transformFile, writeFile, (err) => {

  if (err) {

    console.log(err.message)

  }

})


查看完整回答
反對 回復(fù) 2022-09-29
?
慕工程0101907

TA貢獻(xiàn)1887條經(jīng)驗 獲得超5個贊

https://nodejs.org/api/fs.html#fs_fs_read_fd_buffer_offset_length_position_callback

不要一次讀取整個文件...閱讀其中的一小段緩沖。并用緩沖的片段尋找您的輸入....然后增加您的緩沖區(qū)起始位置并再次執(zhí)行此操作....建議讓每個緩沖區(qū)開始,而不是在前一個緩沖區(qū)的末尾...但至少與所搜索數(shù)據(jù)的預(yù)期大小重疊,這樣您就不會遇到一半數(shù)據(jù)位于一個緩沖區(qū)的末尾,而另一半位于另一個緩沖區(qū)的開頭


查看完整回答
反對 回復(fù) 2022-09-29
?
千萬里不及你

TA貢獻(xiàn)1784條經(jīng)驗 獲得超9個贊

您可以使用文件讀取流。但是,您必須找到一種方法來檢測讀取數(shù)據(jù)是否僅包含部分結(jié)果。


查看完整回答
反對 回復(fù) 2022-09-29
?
慕運維8079593

TA貢獻(xiàn)1876條經(jīng)驗 獲得超5個贊

您可能想要做的是使用流,以便在部分讀取后寫入。此示例可能適合您。您需要將輸出文本文件“.tmp”復(fù)制到原始文件上,以便在問題中獲得相同的行為。它的工作原理是閱讀一個塊,然后查看你是否遇到了一條新線。然后它處理該行,寫入它,然后將其從緩沖區(qū)中刪除。這應(yīng)該有助于解決您的記憶問題。


var fs = require("fs");

var readStream = fs.createReadStream("./BFFile.txt", { encoding: "utf-8" });

var writeStream = fs.createWriteStream("./BFFile.txt.tmp");


const STRING_TO_REMOVE = "badword";

var buffer = ""


readStream.on("data", (chunk) => {

    buffer += chunk;

    var indexOfNewLine = buffer.search("\n");

    while (indexOfNewLine !== -1) {

        var line = buffer.substring(0, indexOfNewLine + 1);

        buffer = buffer.substring(indexOfNewLine + 1, buffer.length);

        line = line.replace(new RegExp(STRING_TO_REMOVE), "");

        writeStream.write(line);

        indexOfNewLine = buffer.search("\n");

    }

})


readStream.on("end", () => {

    buffer = buffer.replace(new RegExp(STRING_TO_REMOVE), "");

    writeStream.write(buffer);

    writeStream.close();

})

此解決方案有一些假設(shè),例如數(shù)據(jù)是UTF-8,每行可能只有1個壞詞,每行都有一些文本(我沒有測試),并且每行都以新行結(jié)尾而不是其他行結(jié)尾。


以下是 Node 中流的文檔,我的另一個想法是使用管道和轉(zhuǎn)換流,但這似乎是過度殺戮。


查看完整回答
反對 回復(fù) 2022-09-29
  • 4 回答
  • 0 關(guān)注
  • 109 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號