105 lines
2.5 KiB
JavaScript
105 lines
2.5 KiB
JavaScript
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
let MainRunner = {
|
|
sourcePath: process.argv[2],
|
|
destPath: process.argv[3],
|
|
|
|
start() {
|
|
// 非绝对路径则前缀加上当前目录
|
|
if (!path.isAbsolute(this.sourcePath)) {
|
|
this.sourcePath = path.join(__dirname, this.sourcePath);
|
|
}
|
|
if (!path.isAbsolute(this.destPath)) {
|
|
this.destPath = path.join(__dirname, this.destPath);
|
|
}
|
|
|
|
this.delAllFiles(this.destPath); // 先删除旧文件
|
|
this.traversalDir(this.sourcePath, this.destPath);
|
|
},
|
|
|
|
// 删除目录下所有文件
|
|
delAllFiles(path) {
|
|
if (fs.existsSync(path)) {
|
|
let files = fs.readdirSync(path);
|
|
files.forEach((file, index) => {
|
|
let curPath = path + '/' + file;
|
|
if (!fs.statSync(curPath).isDirectory()) {
|
|
fs.unlinkSync(curPath);
|
|
}
|
|
});
|
|
}
|
|
},
|
|
|
|
// 遍历文件夹找到
|
|
traversalDir: function(srcDir, destDir) {
|
|
let files = [];
|
|
if ( fs.existsSync(srcDir) ) { //判断给定的路径是否存在
|
|
files = fs.readdirSync(srcDir); //返回文件和子目录的数组
|
|
for (let i = 0, len = files.length; i < len; i++) {
|
|
let file = files[i];
|
|
let srcFile = path.join(srcDir, file);
|
|
let destFile = path.join(destDir, file);
|
|
|
|
let baseName = path.basename(srcFile, '.json');
|
|
let names = baseName.split('_');
|
|
if (names[0] !== 'track') {
|
|
continue;
|
|
}
|
|
|
|
fs.readFile(srcFile, (err, data) => {
|
|
if (err) {
|
|
console.error(err);
|
|
return;
|
|
}
|
|
|
|
//console.log('Success to read file: ' +srcFile);
|
|
|
|
let strTrack = this.convertTrack(data);
|
|
if (!strTrack || strTrack.length <= 0) {
|
|
console.log('track is invalid: ' +srcFile);
|
|
return;
|
|
}
|
|
|
|
fs.writeFile(destFile, strTrack, (err) => {
|
|
if (err) {
|
|
console.error(err);
|
|
return;
|
|
}
|
|
//console.log('Success to write file: ' +destFile);
|
|
});
|
|
});
|
|
|
|
}
|
|
}
|
|
return files;
|
|
},
|
|
|
|
convertTrack(data) {
|
|
let str = '';
|
|
try {
|
|
let track = JSON.parse(data);
|
|
str += '"';
|
|
for (let i = 0, len = track.length; i < len; i++) {
|
|
str += track[i].fishId + ';';
|
|
str += track[i].pathId + ';';
|
|
str += track[i].enterTime + ';';
|
|
str += track[i].exitTime;
|
|
if ((i+1) < len) {
|
|
str += '#';
|
|
}
|
|
}
|
|
str += '"';
|
|
} catch(e) {
|
|
console.error('convertTrack: error to convert track');
|
|
}
|
|
|
|
return str;
|
|
},
|
|
|
|
};
|
|
|
|
module.exports = MainRunner;
|
|
|
|
MainRunner.start();
|