国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

從零開始使用node讀取txt處理后導出excel

frank_fun / 2221人閱讀

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

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

任務描述:

一個醫學系的同學要分析一個叫TCGA的數據庫,每個實驗文件是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

需要提取出幾個指標的對應數據,指標需要她自己輸入,根據文件名中的基因名稱來排序生成一個excel表格,大約如下:

實現代碼:

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

實現過程:

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

因為我沒用過node寫腳本,所以就打算試一試,如果有更好的方案可以后續討論。

1.安裝nodejs

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

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

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

安裝nvm

在終端運行以下語句,里面的版本號看一下:

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

我幫同學配的時候一直報錯,說profile not found. Tried (as defined in $PROFILE),所以建議如果沒有這個文件的話,先用以下語句建一個文件以后再運行

touch ~/.bash_profile

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

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

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

nvm install 7

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

安裝依賴庫

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

2.node中讀取txt

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

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

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

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中的正則表達式提取文字

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

正則匹配函數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里面有正則表達的詳細過濾規則:
https://developer.mozilla.org...

4.node中導出excel

這個我主要參考了small2寫的node.js讀寫excel文件。引入了庫excel-export用于導出excel。基本上就是改了一下他的exports.write函數,加入了我需要導入的邏輯,因為我的首行各單元格內容是用戶輸入的,所以就是還要復制新的caption。并且有的時候需要合并另一個excel里面的cd274的值。

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

然后調用var result = excelPort.execute(conf),得到用于寫入的二進制數據。

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

另外有個問題,我發現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,我就沒仔細看。
https://www.npmjs.com/package...

總結

第一次正經的自己裝了一個node,然后花了一天時間實現了這個功能,還是很開心的。但是由于后來沒什么耐心了,各種實現應該不太符合規范。等學習一段時間我再來改進。

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/82483.html

相關文章

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

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

    NervosNetwork 評論0 收藏0
  • 前端js實現字符串/圖片/excel文件下載

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

    DevWiki 評論0 收藏0
  • 前端js實現字符串/圖片/excel文件下載

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

    ingood 評論0 收藏0
  • json轉換Excel

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

    KnewOne 評論0 收藏0

發表評論

0條評論

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