欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解使用Node.js 將txt文件轉(zhuǎn)為Excel文件

 更新時(shí)間:2017年07月05日 14:11:43   作者:吃土的小此方  
這篇文章主要介紹了詳解使用Node.js 將txt文件轉(zhuǎn)為Excel文件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

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

不過既然是費(fèi)時(shí)費(fèi)力又枯燥的工作,自然就應(yīng)該交給代碼去解決。畢竟,我堅(jiān)信任何的科學(xué)技術(shù)就是為了讓人類偷懶而存在的。那么就先切入正題,先上GitHub的項(xiàng)目地址。歡迎批評指點(diǎn)。

GitHub項(xiàng)目:report-maker

項(xiàng)目分析

既然準(zhǔn)備要上代碼了,作為一個(gè)狂熱的前端愛好者,自然首選Node.js了。這一個(gè)項(xiàng)目主要的目的就是將txt文件中的內(nèi)容按照一定的規(guī)則轉(zhuǎn)化為固定格式的表格并導(dǎo)出為Excel。那么重點(diǎn)就可以分為下面兩步了。

  1. Excel文件的生成
  2. txt內(nèi)容的整理

1. Excel文件的生成

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

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

參考教程:使用node-xlsx進(jìn)行excel文件的讀寫

2. txt內(nèi)容的整理

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

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

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

 Policy Name:  policyName2
 ……省略中間內(nèi)容……
 ……

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

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

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

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

/**
 * 對每一個(gè)policy進(jìn)行整理 使其符合表格插入的形式
 * @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;
}

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

不過似乎最終如果能導(dǎo)出為Word,似乎更好??磥磉€有新的改進(jìn)空間還留著呢。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 又拍云 Node.js 實(shí)現(xiàn)文件上傳、刪除功能

    又拍云 Node.js 實(shí)現(xiàn)文件上傳、刪除功能

    這篇文章主要介紹了又拍云 Node.js 實(shí)現(xiàn)文件上傳、刪除功能,代碼簡單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-10-10
  • koa2上傳文件及https配置實(shí)現(xiàn)教程

    koa2上傳文件及https配置實(shí)現(xiàn)教程

    這篇文章主要為大家介紹了koa2上傳文件及https配置實(shí)現(xiàn)教程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • Mongoose經(jīng)常返回e11000 error的原因分析

    Mongoose經(jīng)常返回e11000 error的原因分析

    這篇文章主要給大家分析了Mongoose經(jīng)常返回e11000 error的原因,文中介紹的非常詳細(xì),對大家具有一定的參考價(jià)值,需要的朋友可以們下面來一起看看吧。
    2017-03-03
  • Node.js查詢MySQL并返回結(jié)果集給客戶端的全過程

    Node.js查詢MySQL并返回結(jié)果集給客戶端的全過程

    nodejs最大的優(yōu)勢也是大家用著最為難以理解的一點(diǎn),就是它的異步功能,它幾乎所有的io操作都是異步的,這也就導(dǎo)致很多人不理解也用不習(xí)慣,下面這篇文章主要給大家介紹了關(guān)于Node.js查詢MySQL并返回結(jié)果集給客戶端的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • 使用Nodejs連接mongodb數(shù)據(jù)庫的實(shí)現(xiàn)代碼

    使用Nodejs連接mongodb數(shù)據(jù)庫的實(shí)現(xiàn)代碼

    這篇文章主要介紹了使用Nodejs連接mongodb數(shù)據(jù)庫的實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2017-08-08
  • 淺析Node.js實(shí)現(xiàn)HTTP文件下載

    淺析Node.js實(shí)現(xiàn)HTTP文件下載

    本文介紹如何用Node.js來實(shí)現(xiàn)HTTP文件下載,文章以實(shí)例演示所以很詳細(xì),有需要的小伙伴們可以參考學(xué)習(xí)。
    2016-08-08
  • nodejs如何將多個(gè)目錄文件合并成一個(gè)

    nodejs如何將多個(gè)目錄文件合并成一個(gè)

    這篇文章主要介紹了nodejs如何將多個(gè)目錄文件合并成一個(gè)問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • node.js中的事件處理機(jī)制詳解

    node.js中的事件處理機(jī)制詳解

    相信接觸過編程的同學(xué)應(yīng)該都了解,在訪問任何網(wǎng)頁的時(shí)候,會伴隨著許多的事件,例如點(diǎn)擊菜單,移動(dòng)鼠標(biāo)等等。那么node.js是如何處理的?下面通過這篇文章就來給大家詳細(xì)的介紹下node.js中的事件處理機(jī)制,有需要的朋友們可以參考借鑒,下面來一起學(xué)習(xí)學(xué)習(xí)吧。
    2016-11-11
  • node.js監(jiān)聽文件變化的實(shí)現(xiàn)方法

    node.js監(jiān)聽文件變化的實(shí)現(xiàn)方法

    這篇文章主要給大家介紹了關(guān)于node.js監(jiān)聽文件變化的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用node.js具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • node koa2實(shí)現(xiàn)上傳圖片并且同步上傳到七牛云存儲

    node koa2實(shí)現(xiàn)上傳圖片并且同步上傳到七牛云存儲

    這篇文章主要介紹了node koa2實(shí)現(xiàn)上傳圖片并且同步上傳到七牛云存儲,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07

最新評論