亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

從零開始使用node讀取txt處理后導(dǎo)出excel

frank_fun / 2343人閱讀

摘要:安裝執(zhí)行版本號,例如以下語句可以安裝幾的版本好像在墻內(nèi)只能找到以前的版本使用可以查看現(xiàn)有的版本,可以支持模糊切換。

一直說要好好學(xué)習(xí),總結(jié)知識什么的。一直覺得沒有時間。周一終于提交了論文盲審。決定從今天每周都總結(jié)一次自己的所學(xué)。希望自己能堅(jiān)持。

任務(wù)描述:

一個醫(yī)學(xué)系的同學(xué)要分析一個叫TCGA的數(shù)據(jù)庫,每個實(shí)驗(yàn)文件是txt,格式如下:

hsa-miR-1228* 5.185500096 hsa-miR-1229 5.754380131
hsa-miR-1231 4.542420238 hsa-miR-1233 5.148618769
hsa-miR-1234 5.581203559

需要提取出幾個指標(biāo)的對應(yīng)數(shù)據(jù),指標(biāo)需要她自己輸入,根據(jù)文件名中的基因名稱來排序生成一個excel表格,大約如下:

實(shí)現(xiàn)代碼:

第一次寫的不好,如果看了覺得可以改進(jìn)請幫忙提出,謝謝。
https://github.com/LuyaoWang/...

實(shí)現(xiàn)過程:

這個任務(wù)我能想到的方案有:
1.配一個vs環(huán)境然后用C#做一個exe執(zhí)行程序。但是對方有兩臺電腦,操作系統(tǒng)分別為mac和windows,所以就放棄了。
2.直接寫shell腳本,可以處理txt和cvs。但是我不太確定,而且cvs還要轉(zhuǎn)一層。
3.幫助對方配一個node環(huán)境,然后用node寫個腳本運(yùn)行一下。

因?yàn)槲覜]用過node寫腳本,所以就打算試一試,如果有更好的方案可以后續(xù)討論。

1.安裝nodejs

如果是幫不會代碼的人裝環(huán)境最好是直接去node官網(wǎng)下個對應(yīng)版本就了了。不然折騰起來麻煩,地址如下:

https://nodejs.org/en/download/

如果涉及后續(xù)的開發(fā),建議先下載nvm(node version manager),再裝node。

安裝nvm

在終端運(yùn)行以下語句,里面的版本號看一下:

curl -o https://raw.githubusercontent.com/creationix/nvm/v0.25.2/install.sh | bash

我?guī)屯瑢W(xué)配的時候一直報錯,說profile not found. Tried (as defined in $PROFILE),所以建議如果沒有這個文件的話,先用以下語句建一個文件以后再運(yùn)行

touch ~/.bash_profile

如果裝完輸入nvm還是找不到就把以下文字輸入.bash_profile,出錯提示里面也有的。

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"  # This loads nvm

安裝node
執(zhí)行nvm install + 版本號,例如以下語句可以安裝node7.幾的版本(好像在墻內(nèi)只能找到3.3.1以前的版本)

nvm install 7

使用nvm ls可以查看現(xiàn)有的node版本,nvm use 7 可以支持模糊切換。

安裝依賴庫

在node中已經(jīng)包含了npm,node project manager吧。所以,我寫了一個package.json文件,說明了這個腳本需要依賴的excel庫,用npm install來自動安裝。

2.node中讀取txt

在我現(xiàn)在的理解下,我覺得node只是一個平臺,里面有很多的api和庫可以用來調(diào)用,真正開發(fā)的語言還是JavaScript,之后如果有更多理解會修改。所以我就查了一下node已經(jīng)集合了一個名為fs的庫用于處理txt。

主要用到兩個api,readfile用來讀文件,readdir用于讀文件夾。
api文檔地址:
https://nodejs.org/api/fs.htm...

建立一個文件app.js,然后把一下代碼復(fù)制進(jìn)去,在命令行輸入node app.js就可以得到讀取的txt文件內(nèi)容了。

var fs = require("fs");
fs.readFile("txt文件地址", "utf-8", function(error, config) {
    if (error) {
        console.log(error);
        console.log("config文件讀入出錯");
    }
    console.log(config.toString());
}
3.node中的正則表達(dá)式提取文字

這個需要用戶輸入提取的那個數(shù)據(jù)名詞,然后我把數(shù)據(jù)名詞后面的數(shù)字提取出來。這個交互,我使用的是讓她填寫一個config.txt,然后我解析一下提取出名詞,按照正則表達(dá)式來匹配,一個名詞一重循環(huán)(這里可以考慮排序名詞,二分查找改進(jìn)效率)。

正則匹配函數(shù)match()
原型:stringObj.match(regExp)
可以有兩種使用方式,一種是寫死匹配stringObj.match(/ffffd/),一種是傳入一個string,然后生成一個RegExp變量,如下:

var itemName = [];
itemName[0] = "hsa-miR-424";
var itemReg  = [];
itemReg[0]  = new RegExp(itemName[0]);itemName存有名詞
data.match(itemReg[0]);

具體參看mdn里面有正則表達(dá)的詳細(xì)過濾規(guī)則:
https://developer.mozilla.org...

4.node中導(dǎo)出excel

這個我主要參考了small2寫的node.js讀寫excel文件。引入了庫excel-export用于導(dǎo)出excel?;旧暇褪歉牧艘幌滤膃xports.write函數(shù),加入了我需要導(dǎo)入的邏輯,因?yàn)槲业氖仔懈鲉卧駜?nèi)容是用戶輸入的,所以就是還要復(fù)制新的caption。并且有的時候需要合并另一個excel里面的cd274的值。

conf是所有需要導(dǎo)入excel的配置和數(shù)據(jù)。先把這個conf里面的所有數(shù)值填寫好。包括conf.name就是工作表名稱,conf.cols中存放首行單元格信息。conf.rows就是之后每一行的信息。

然后調(diào)用var result = excelPort.execute(conf),得到用于寫入的二進(jìn)制數(shù)據(jù)。

最后調(diào)用fs.writeFile(filePath, result, "binary", call_back)寫入excel。

另外有個問題,我發(fā)現(xiàn)type如果是number的時候我的excel打不開,不知道為什么。

var excelPort = require("excel-export");

exports.write = function(req, res) {
    //   console.log(itemName);
    var conf  = {};
    conf.name = "mysheet";
    conf.cols = [
        {caption: "gene_id", type: "string", width: 40}
    ];
    for (let i = 0; i < itemNum; i++) {
        if (isCD274.match(/y/)) {
            conf.cols[i + 2]         = {caption: "", type: "string", width: 40};
            conf.cols[i + 2].caption = itemName[i];
        } else {
            conf.cols[i + 1]         = {caption: "", type: "string", width: 40};
            conf.cols[i + 1].caption = itemName[i];
        }
    }
    if (isCD274.match(/y/)) {
        conf.cols[1] = {caption: "cd274", type: "string", width: 40};
    }
    conf.rows    = req;
    var result   = excelPort.execute(conf);
    var filePath = "./result.xlsx";
    fs.writeFile(filePath, result, "binary", function(err) {
        if (err) {
            console.log(err);
        }
        console.log("success!");
    });

};

官方文檔在此,但是例子用了express,我就沒仔細(xì)看。
https://www.npmjs.com/package...

總結(jié)

第一次正經(jīng)的自己裝了一個node,然后花了一天時間實(shí)現(xiàn)了這個功能,還是很開心的。但是由于后來沒什么耐心了,各種實(shí)現(xiàn)應(yīng)該不太符合規(guī)范。等學(xué)習(xí)一段時間我再來改進(jìn)。

這應(yīng)該是我第一次用js做了腳本操作,之前基本就是最簡單的dom操作。我的思維還是停留在c++的那種同步模式,本來想直接用同步機(jī)制,但是這樣用js的好處就體會不到了。作用域的問題也特別亂,我感覺我一直在不停的把變量嵌套進(jìn)回調(diào)函數(shù)?;卣{(diào)嵌套回調(diào),我只知道如何輸入一個數(shù)據(jù)到函數(shù)里,不知道怎么輸出,只能無限循環(huán)進(jìn)去,我看了一下express可以有req和res的交互,但是不想給一個這么小的例子加太多東西,所以就先這樣。我覺得js本身應(yīng)該解決了這個問題,只是我還沒學(xué)到,下周研究一下這個問題,把作用域搞搞清楚。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/82483.html

相關(guān)文章

  • 從零開始的webpack生活-0x009:FilesLoader裝載文件

    摘要:修改配置文件匹配的文件名,這里匹配后綴為的,只要了該文件名結(jié)尾的文件,都將使用這個來處理命中后使用的加載器查看結(jié)果,和之前一致,推薦使用配置文件形式,可以保持引入文件格式的一致性。有利于維護(hù)和美觀更多配置,可以查閱關(guān)于部分。 0x001 概述 上一章講的是DLL加速編譯,這一章開始講loader相關(guān)的部分,但是關(guān)于plugin的部分善未完結(jié),因?yàn)榧磳⒁v的ExtractTextWebp...

    NervosNetwork 評論0 收藏0
  • 前端js實(shí)現(xiàn)字符串/圖片/excel文件下載

    摘要:實(shí)現(xiàn)并發(fā)請求實(shí)現(xiàn)并發(fā)請求生成并下載字符串文件首先我們需要了解一個特殊的數(shù)據(jù)格式。如果類型未知,則該值為空字符串。表示狀態(tài)的數(shù)字。一旦完成,屬性中將包含一個字符串以表示所讀取的文件內(nèi)容。 在web開發(fā)中,如果你想讓用戶下載或者導(dǎo)出一個文件,應(yīng)該怎么做呢?傳統(tǒng)的做法是在后端存儲或者即時生成一個文件來提供下載功能,這樣的優(yōu)勢是可以做權(quán)限控制、數(shù)據(jù)二次處理,但缺點(diǎn)是需要額外發(fā)起請求、增大服務(wù)端...

    DevWiki 評論0 收藏0
  • 前端js實(shí)現(xiàn)字符串/圖片/excel文件下載

    摘要:實(shí)現(xiàn)并發(fā)請求實(shí)現(xiàn)并發(fā)請求生成并下載字符串文件首先我們需要了解一個特殊的數(shù)據(jù)格式。如果類型未知,則該值為空字符串。表示狀態(tài)的數(shù)字。一旦完成,屬性中將包含一個字符串以表示所讀取的文件內(nèi)容。 在web開發(fā)中,如果你想讓用戶下載或者導(dǎo)出一個文件,應(yīng)該怎么做呢?傳統(tǒng)的做法是在后端存儲或者即時生成一個文件來提供下載功能,這樣的優(yōu)勢是可以做權(quán)限控制、數(shù)據(jù)二次處理,但缺點(diǎn)是需要額外發(fā)起請求、增大服務(wù)端...

    ingood 評論0 收藏0
  • json轉(zhuǎn)換Excel

    純JS將json數(shù)據(jù)轉(zhuǎn)成Excel并導(dǎo)出 采用JS-XLSX這個簡單的Javascript庫來讀取和寫入Excel表格文件,并且能夠支持最新版本的XLSX文件 一、node 環(huán)境 安裝XLSX庫 1、with npm $ npm install xlsx 2、node 讀取文件 if(typeof require !== undefuned) var XLSX = requ...

    KnewOne 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<