biaomei.jpg
java原始代碼部分如下
public static final int ERR_ONLINE_DECLINED = 1025; //交易聯(lián)機(jī)拒絕
//public static final int ERR_RESELECT_APP = 1026; //GPO返回0x6985,重新選擇應(yīng)用
public static final int ERR_OFFLINE_APPROVED = 1027; //交易脫機(jī)批準(zhǔn)
需要得到的excel結(jié)果
image.png
最終采用node配合以上插件來完成泉沾,將java代碼中的相關(guān)數(shù)據(jù)采集出來.
1洲拇、先安裝插件
npm install node-xlsx
npm install line-reader
npm install http
npm install md5-node
2棉饶、在百度翻譯api上注冊一個(gè)賬號 領(lǐng)取免費(fèi)使用額度
https://ai.baidu.com/ai-doc/MT/ykqq95r2y
本來是打算用谷歌的拥褂,但最近發(fā)現(xiàn)谷歌的都不能訪問了求橄,知道的大佬可以告知今野。
注冊申請了之后可以得到一個(gè)appid和對應(yīng)的秘鑰。
正常使用會返回翻譯的結(jié)果數(shù)據(jù)如下
{
"from": "en",
"to": "zh",
"trans_result": [{
"src": "apple",
"dst": "\u82f9\u679c" //蘋果
}]
}
3罐农、接著編寫完整node代碼
//生成Excel依賴包
var xlsx = require('node-xlsx')
//寫入文件依賴包
var fs = require('fs')
//一行一行讀取
var lineReader = require('line-reader');
//網(wǎng)絡(luò)請求
var http = require('http');
//md5加密
var md5 = require('md5-node');
var sheetList = []
var listCount = 0;
lineReaderTxt()
//將java文件代碼的每一行讀取
async function lineReaderTxt() {
sheetList.push(['狀態(tài)碼', "狀態(tài)值", "結(jié)果", "是否使用中", "代碼行數(shù)來源"])
var lineList = []
var lineCount = 0
lineReader.eachLine('PostCode.java', function(line, last) {
lineCount += 1
if (line.indexOf('//public static final int') != -1) {
lineList.push(line)
} else if (line.indexOf('public static final int') != -1) {
lineList.push(line)
}
if (last) {
console.log('最后一行了:', lineCount);
const used = process.memoryUsage().heapUsed / 1024 / 1024;
console.log(`The script uses approximately ${Math.round(used * 100) / 100} MB`);
loopList(lineList)
}
});
}
function loopList(lineList) {
var successCount = 0
console.log("開始新的循環(huán)", lineList.length)
var lineCount = 0
lineList.forEach((line, index) => {
if (line.indexOf('//public static final int') != -1) {
lineCount += 1
translateOneJavaLine(line, false, lineCount, index == (lineList.length - 1), (item) => {
successCount += 1
console.log("successCount1:" + successCount, "lineList:" + lineList.length)
})
} else if (line.indexOf('public static final int') != -1) {
lineCount += 1
translateOneJavaLine(line, true, lineCount, index == (lineList.length - 1), (item) => {
successCount += 1
console.log("successCount2:" + successCount, "lineList:" + lineList.length)
})
}
if (successCount == lineList.length) {
writeDataToExcel()
}
})
}
//講數(shù)據(jù)寫入excel
function writeDataToExcel() {
console.log('寫入excel前的校驗(yàn)', sheetList.length, listCount)
//配置条霜,設(shè)置列寬
const options = {
'!cols': [{
wch: 30
}, {
wch: 10
}, {
wch: 50
}, {
wch: 20
}, {
wch: 20
}]
};
//生成二進(jìn)制數(shù)據(jù)流
var buffer = xlsx.build([{
name: "test",
data: sheetList
}], options);
//寫入文件
fs.appendFile('./test13.xlsx', buffer, function(err) {
if (err) {
console.log(err, '保存excel出錯(cuò)')
} else {
console.log('寫入excel成功!!!')
}
})
}
//提取并翻譯一行的數(shù)據(jù)
function translateOneJavaLine(line, isUsed, lineNum, isLast, callback) {
if (line.indexOf("=") != -1) {
var itemList = []
//校驗(yàn)是否有 = 符號
var lis = line.split('=')
const errorDaihao = lis[0].split('final int')[1].replace(/(^\s*)|(\s*$)/g, "")
// console.log('輸出的狀態(tài)', errorDaihao)
itemList.push(errorDaihao)
const second = lis[1]
const errorCode = second.split(';')[0].replace(/(^\s*)|(\s*$)/g, "")
// console.log('輸出的狀態(tài)碼', errorCode)
itemList.push(errorCode)
const seconds = lis[1].split(';')
if (seconds.length > 1) {
if (seconds[1].indexOf('//') != -1) {
const translateSrc = seconds[1].split('//')[1].replace(/(^\s*)|(\s*$)/g, "")
itemList.push(`${translateSrc}`)
itemList.push(isUsed ? '是' : '否')
itemList.push(`${lineNum}`)
sheetList.push(itemList)
callback(itemList)
} else {
itemList.push('nothing')
itemList.push(isUsed ? '是' : '否')
itemList.push(`${lineNum}`)
sheetList.push(itemList)
callback(itemList)
}
}
}
}
//將中文翻譯成引文 使用百度api
async function translateChineseToEnglish(keyword1) {
var keyword = encodeURI(keyword1)
// console.log('需要查詢的數(shù)據(jù)', keyword)
const appid = '20111008000339947'
const secretKey = 'FGsDn1G62CdqyWVyFXQm'
const randomStr = '1435660288'
var params1 = `${appid}${keyword1}${randomStr}${secretKey}`
var params2 = md5(params1)
const baiduHost = 'http://api.fanyi.baidu.com/api/trans/vip/translate'
let url =
`${baiduHost}?q=${keyword}&from=zh&to=en&appid=${appid}&salt=${randomStr}&sign=${params2}`
return new Promise((resolve) => {
http.get(url, function(res) {
res.setEncoding('utf8');
var body = "";
res.on('data', function(chunk) {
body += chunk;
}).on('end', function() {
var obj = JSON.parse(body)
if (obj.trans_result && obj.trans_result.length > 0) {
const result = obj.trans_result[0].dst
// console.log('翻譯的結(jié)果是', result)
resolve(result)
}
});
}).on('error', function(e) {
console.log('請求報(bào)錯(cuò)', JSON.stringify(e))
})
})
}
4、執(zhí)行node腳本涵亏,輸出excel
image.png