亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

詳解使用Node.js 將txt文件轉為Excel文件

發布時間:2020-09-01 10:24:47 來源:腳本之家 閱讀:173 作者:吃土的小此方 欄目:web開發

最近同事需要對一份報告進行整理,一共有80個報告約9000多行放在一個txt文件中。雖然每份報告的格式比較類似,但其中部分字段對應的數量依舊會有差別。所以真要靠人工來做,無疑會是一件費時費力的并且是很枯燥的工作。據說如果有了這個程序,可以減少60%的工作量!那么為了我以后的下午茶,自然應該去嘗試一下不是么?

不過既然是費時費力又枯燥的工作,自然就應該交給代碼去解決。畢竟,我堅信任何的科學技術就是為了讓人類偷懶而存在的。那么就先切入正題,先上GitHub的項目地址。歡迎批評指點。

GitHub項目:report-maker

項目分析

既然準備要上代碼了,作為一個狂熱的前端愛好者,自然首選Node.js了。這一個項目主要的目的就是將txt文件中的內容按照一定的規則轉化為固定格式的表格并導出為Excel。那么重點就可以分為下面兩步了。

  1. Excel文件的生成
  2. txt內容的整理

1. Excel文件的生成

Excel文件自然是尋找可以依賴的模塊了(畢竟我自己寫不出來)。找了一圈,發現js-xlsx這一個模塊。雖然看起來很復雜,但其實只要提供好表頭和內容就可以,其余只是對于內容數據整理的固定模板。

相關教程可以參考下面這篇,講的比較詳細所以這里就不多做贅述了。

參考教程:使用node-xlsx進行excel文件的讀寫

2. txt內容的整理

解決了Excel導出的問題(不然就得換Py了呢),文檔內容的整理便是這個項目最重要的問題了。最終整理的表格樣式以及需要抽出的項目內容已經和同事確認過了。那么接下來就是如何整理了一個有著80個長短不一報告的文件了。

首先來看看文件的格式,整個文件的格式類似于下面這樣。

 Policy Name:  policyName1
 ……省略中間內容……
 Policy Type:  Standard (0)
 ……省略中間內容……
 Client/HW/OS/Pri/CIT: Client1
 Client/HW/OS/Pri/CIT: Client2
 Client/HW/OS/Pri/CIT: Client3
 Client/HW/OS/Pri/CIT: Client4
 ……省略多個Client
 Include:   /dir1
 Include:   /dir2
 Include:   /dir3
 ……省略多個Include
 Schedule:    Schedule1
  Type:
  ……
 Schedule:    Schedule2
  Type:
  ……
 ……省略多個Schedule

 Policy Name:  policyName2
 ……省略中間內容……
 ……

可以看出,每一個段落是以Policy Name為分界的。那么,利用fs.readFile將完整的文件讀取進來,作為一個字符串使用split方法進行切割。具體代碼如下:

fs.readFile(filePath, 'UTF-8', function (err, data) {
 if (err) throw err;
 // 對文件讀取的數據進行處理,首先用 policyName 進行切割
 var policyLists = data.split(config.splitRules.policyName);
 if (policyLists[0] === '\r\n') {
 policyLists.shift();
 };

然后針對數組中每一個元素(一個段落)根據之前文件中所需要項目,使用正則表達式切提取出所需要的內容,然后將提取出的內容組成所需要的數據結構,具體代碼如下。其中schedule項目中內容也并非在一行中,所以也同樣使用上面的方法進行切割。而對于其他的項目,則通過正則表達式來進行內容的獲取。

 policyLists.forEach(function (policy) {
 var policyData = policyFormatter(config.splitRules.policyName + policy);
 excelData.push(policyData);
 });

/**
 * 對每一個policy進行整理 使其符合表格插入的形式
 * @param {*} policy 
 * {
 * policyName: String
 * client: []]
 * policyType: String
 * include: []
 * schedule[]
 * scheduleResidence: String
 * }
 * 
 */
function policyFormatter(policy) {

 var policyNameMatcher = new RegExp(config.splitRules.policyName + "([\\s\\w\\d\\-]*)\\r\\n"),
 clientMatcher = new RegExp(config.splitRules.client + "([\\s\\w\\d\\?\\-\\.]*)\\r\\n", "g"),
 policyTypeMatcher = new RegExp(config.splitRules.policyType + "([\\s\\w\\d\\(\\)\\-]*)\\r\\n"),
 includeMatcher = new RegExp(config.splitRules.include + "([\\s/\\w\\.\\\\:_\\?=\\\"\\*]*)\\r\\n", "g");

 var scheduleLists = policy.split(config.splitRules.schedule).slice(1),
 scheduleFormatLists = [],
 scheduleResidenceMatcher = new RegExp(config.splitRules.scheduleResidence + "([\\s\\w\\d\\-\\(\\)]*)\\r\\n");

 scheduleLists.forEach(function (schedule) {
 var scheduleFormat = config.splitRules.schedule + schedule;
 scheduleFormatLists.push(scheduleFormat);
 });

 // console.log(scheduleFormatLists);

 var results = {
 policyName: policy.match(policyNameMatcher)[1].trim(),
 client: policy.match(clientMatcher) ? policy.match(clientMatcher).join('').trim() : '',
 policyType: policy.match(policyTypeMatcher)[1].trim(),
 include: policy.match(includeMatcher).join('').trim(),
 schedule: scheduleFormatLists.join('').trim(),
 scheduleResidence: scheduleLists[0].match(scheduleResidenceMatcher)[1].trim()
 };

 // console.dir(results);
 return results;
}

主要邏輯處理完以后,把收集到的內容傳給excel處理模塊,導出成文件就能解決問題了。

不過似乎最終如果能導出為Word,似乎更好。看來還有新的改進空間還留著呢。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

教育| 沁阳市| 洪湖市| 禹城市| 遵义县| 永平县| 墨竹工卡县| 察雅县| 汉阴县| 长乐市| 闻喜县| 武汉市| 株洲市| 南木林县| 当涂县| 武山县| 大邑县| 土默特右旗| 云林县| 德惠市| 舞钢市| 和政县| 星座| 休宁县| 兰考县| 云南省| 新源县| 哈巴河县| 无极县| 大庆市| 巴里| 马边| 申扎县| 汉川市| 呼伦贝尔市| 印江| 旺苍县| 辽宁省| 淳化县| 抚顺县| 庆城县|