你的浏览器不支持canvas

Love You Ten Thousand Years

Node中的标准输入输出流

Date: Author: M/J

本文章采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可。转载请注明来自小可嗒嗒的博客

牛客网中对JavaScript程序员是很不友好的。在处理输入输出流的时候,总是得不到好的处理。在Windows平台下,在处理外部输入输出的时候也非常不擅长进行调试。所以这里,针对这个些问题,看看有没有解决方法。

我们先贴上代码。代码是针对Windows平台,使用命令行进行调试的程序片段。

/**
 * Created by timi on 2017/6/14.
 */
process.stdin.resume();             //stdin是可读的输出流,默认是暂停状态。所以想要从stdin读取必须要调用一次process.stdin.resume();
process.stdin.setEncoding('utf8');  //设置字符编码

var input = "";
var input_array = "";

process.stdin.on('data', function (data) {  //监听事件data事件,当有数据过来时触发
    input += data;                          //读取data(字符串数据)到input
    if (data === '\r\n')                    //如果遇到换行,Linux使用'\n'换行
        process.stdin.emit('end');          //发射end事件,表示读取结束
});

process.stdin.on('end', function () {       //读取结束
    if (input === '\n'){                    //没有输入,直接结束
        process.stdin.emit('end');
        return;
    }
    input_array = input.split("\n");        //变成数组
    var n,input_arr=[],arr;
    var nLine = 0;

    while(nLine < input_array.length){
        var line = input_array[nLine++].trim(); //去掉数组每一行的首尾的空白符
        if(line === ''){
            continue;
        }
        input_arr.push(line.split(' '));    //变成一个二维数组
    }
    n = parseInt(input_arr[0][0],10);       //二位数组的第一行
    arr = input_arr[1].map(e => parseInt(e));//二维数组的第二行

    console.log(input);
    console.log(input_array);
    console.log(input_arr);
    console.log(n);
    console.log(arr);
});

以下是举例:

12
1024 1024

12
1024 1024


[ '12\r', '1024 1024\r', '\r', '' ]
[ [ '12' ], [ '1024', '1024' ] ]
12
[ 1024, 1024 ]

最后的narr就是我们获得的数据,感觉好麻烦。


对于本文内容有问题或建议的小伙伴,欢迎在文章底部留言交流讨论。