在新功能之前,做了一个小程序,还没有传上去,按照昨天的学习,做了个识别文件夹下所有文本是否包含汉字的程序(想着以后做国际化用,目标就是找到所有的中文所在行
数,然后输出毕竟现在的代码写的乱了)
用了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();