zoukankan      html  css  js  c++  java
  • 【Node.js】'readline' 逐行读取、写入文件内容

    []运用readline逐行读取的两种实现


    效果图如下:

    左边1.log 为源文件

    右边1.readline.log为复制后的文件

    下边为命令行输出



    实现方式一:

    [javascript] view plain copy
    1. var readline = require('readline');  
    2. var fs = require('fs');  
    3. var os = require('os');  
    4.   
    5. var fReadName = './1.log';  
    6. var fWriteName = './1.readline.log';  
    7. var fRead = fs.createReadStream(fReadName);  
    8. var fWrite = fs.createWriteStream(fWriteName);  
    9.   
    10.   
    11. var objReadline = readline.createInterface({  
    12.     input: fRead,  
    13. // 这是另一种复制方式,这样on('line')里就不必再调用fWrite.write(line),当只是纯粹复制文件时推荐使用  
    14. // 但文件末尾会多算一次index计数   sodino.com  
    15. //  output: fWrite,   
    16. //  terminal: true  
    17. });  
    18.   
    19.   
    20. var index = 1;  
    21. objReadline.on('line', (line)=>{  
    22.     var tmp = 'line' + index.toString() + ':' + line;  
    23.     fWrite.write(tmp + os.EOL); // 下一行  
    24.     console.log(index, line);  
    25.     index ++;  
    26. });  
    27.   
    28. objReadline.on('close', ()=>{  
    29.     console.log('readline close...');  
    30. });  


    实现方式二:

    [javascript] view plain copy
    1. var readline = require('readline');  
    2. var fs = require('fs');  
    3. var os = require('os');  
    4.   
    5. var fReadName = './1.log';  
    6. var fWriteName = './1.readline.log';  
    7. var fRead = fs.createReadStream(fReadName);  
    8. var fWrite = fs.createWriteStream(fWriteName);  
    9.   
    10. var enableWriteIndex = true;  
    11. fRead.on('end', ()=>{  
    12.     console.log('end');  
    13.     enableWriteIndex = false;  
    14. });  
    15.   
    16. var objReadline = readline.createInterface({  
    17.     input: fRead,  
    18.     output: fWrite,   
    19.     terminal: true  
    20. });  
    21.   
    22.   
    23. var index = 1;  
    24. fWrite.write('line' + index.toString() +':');  
    25. objReadline.on('line', (line)=>{  
    26.     console.log(index, line);  
    27.     if (enableWriteIndex) {  
    28.         // 由于readline::output是先写入后调用的on('line')事件,  
    29.         // 所以已经读取文件完毕时就不需要再写行号了... sodino.com  
    30.         index ++;  
    31.         var tmp = 'line' + index.toString() + ':';  
    32.         fWrite.write(tmp);        
    33.     }  
    34. });  
    35.   
    36.   
    37.   
    38. objReadline.on('close', ()=>{  
    39.     console.log('readline close...');  
    40. });  

  • 相关阅读:
    BZOJ1527 : [POI2005]Pun-point
    2016-2017 ACM-ICPC Southwestern European Regional Programming Contest (SWERC 2016)
    2016-2017 ACM-ICPC Northwestern European Regional Programming Contest (NWERC 2016)
    NAIPC-2016
    BZOJ2498 : Xavier is Learning to Count
    ACM ICPC Vietnam National Second Round
    XVI Open Cup named after E.V. Pankratiev. GP of Ukraine
    XVI Open Cup named after E.V. Pankratiev. GP of Peterhof
    HDU5509 : Pattern String
    BZOJ4583 : 购物
  • 原文地址:https://www.cnblogs.com/wxmdevelop/p/7543190.html
Copyright © 2011-2022 走看看