node命令行开发--文件目录下所有文件中文查找

在新功能之前,做了一个小程序,还没有传上去,按照昨天的学习,做了个识别文件夹下所有文本是否包含汉字的程序(想着以后做国际化用,目标就是找到所有的中文所在行

数,然后输出毕竟现在的代码写的乱了)

用了commander,保存下来直接运行就可以了,也可以封装成命令,回头想写个直接输入到文本的,这样以后查标准化就不怕了

运行结果,我在./test 下放了一个叫做1.html的文件,内容是

1
那大大叔大叔大叔的aaa
啊等
qd
as

然后运行的结果是


代码如下(老手勿喷~)

#! /usr/bin/env node
// 引入需要的模块
var program = require("commander");
const Table = require('cli-table2') // 表格输出
const superagent = require('superagent') // http请求
var gs = require('nodegrass');
var fs = require("fs");
var path = require('path');
var re =  /[\u4E00-\u9FA5]|[\uFE30-\uFFA0]/; // 判断是否有汉字的正则表达式



function readFileContent(filePath) {
    var file = fs.readFile(filePath,"utf-8",function (err,data) {
            var colomn = data.split("\n");
            var result = []
            var resultArray = [];

             for(var item = 0; item<colomn.length; item++){

                 if(re.test(colomn[item]) && colomn[item].trim() != ''){  //如果有汉字,输出文件和所在行数

                     result.push(item+1);
                     result.push(colomn[item])

                     resultArray.push(result);
                     result = [];
                 }

             }
            // 输出表格

            if(JSON.stringify(result) == "{}" ){ //如果为空就返回,没有中文
                return;
            }
            let table = new Table();


            for(var item = 0; item<resultArray.length; item++) {
                table.push(
                    resultArray[item]
                );

            }
            // fs.writeFileSync('message.txt', resultArray);


            console.log(filePath);
            console.log(table.toString())


        }

    );
}


function fileDisplay(filePath){
    //根据文件路径读取文件,返回文件列表
    fs.readdir(filePath,function(err,files){
        if(err){
            console.warn(err)
        }else{
            //遍历读取到的文件列表
            files.forEach(function(filename){
                //获取当前文件的绝对路径
                var filedir = path.join(filePath,filename);
                //根据文件路径获取文件信息,返回一个fs.Stats对象
                fs.stat(filedir,function(eror,stats){
                    if(eror){
                        console.warn('获取文件stats失败');
                    }else{
                        var isFile = stats.isFile();//是文件
                        var isDir = stats.isDirectory();//是文件夹
                        if(isFile){
                            if(filedir.indexOf(".DS_Store") == -1){
                                readFileContent("./"+filedir)
                            }
                        }
                        if(isDir){
                            fileDisplay(filedir);//递归,如果是文件夹,就继续遍历该文件夹下面的文件
                        }
                    }
                })
            });
        }
    });
}


function isPathExist() {
    return fs.access(url);
}
 // readFileContent('./test/1.html');
//fileDisplay("./test")

function commander() {
    program
        .version('0.0.1')
        .option("-s,--search <string>", "search path to find Chinese character!")
        .parse(process.argv)

    if(program.search){
        var pathName = program.search.toString();
        fs.access(pathName,function (err) {
            if(err){
                console.log("目录不存在")
            }else{
                fileDisplay(pathName)
            }

        })
    }
}

commander();




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值