当前位置: 首页 > 后端技术 > Node.js

从零开始,用node读取txt导出excel

时间:2023-04-03 22:55:52 Node.js

我一直说要好好学习,总结知识。我总觉得我没有时间。论文终于在周一提交盲审。决定从今天开始,每周总结自己所学的东西。我希望我能坚持下去。任务描述:医学系的一名学生想要分析一个名为TCGA的数据库。每个实验文件都是txt,格式如下:hsa-miR-1228*5.185500096hsa-miR-12295.754380131hsa-miR-12314.542420238hsa-miR-12335.148618769hsa-miR-12345.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版本管理器),然后再安装node.安装nvm,在终端运行如下语句,看看里面的版本号:curl-ohttps://raw.githubusercontent.com/creationix/nvm/v0.25.2/install.sh|它说找不到配置文件。试过($PROFILE中定义的),所以建议如果没有这个文件,先用下面语句创建一个文件,然后运行touch~/.bash_profile如果安装完成输入nvm还是找不到,然后把下面的文字输入.bash_profile,同样有错误提示。导出NVM_DIR="$HOME/.nvm"[-s"$NVM_DIR/nvm.sh"]&&\."$NVM_DIR/nvm.sh"#这个加载nvm安装节点执行nvminstall+版本号,例如下面的语句可以安装node7。几个版本(翻墙好像只能找到3.3.1之前的版本)nvminstall7使用nvmls查看已有node版本,nvmuse7可以支持模糊切换。安装依赖库已经在node.js中包含了npm和node项目管理器。于是,我写了一个package.json文件,指明这个脚本需要依赖的excel库,使用npminstall自动安装。2.在node中读取txt在我目前的理解中,我认为node只是一个平台,它有很多API和库可以用来调用。真正的开发语言是JavaScript,了解多了再修改。于是查了一下node组装了一个库fs来处理txt。主要用到两个API,readfile用来读取文件,readdir用来读取文件夹。API文档地址:https://nodejs.org/api/fs.htm...新建一个文件app.js,然后把下面的代码复制进去,在命令行输入nodeapp.js,得到读取的txt文件内容。varfs=require("fs");fs.readFile("txt文件地址","utf-8",function(error,config){if(error){console.log(error);console.log("Errorreadingconfigfile");}console.log(config.toString());}3.node中的正则表达式提取文本,需要用户输入并提取数据名词,然后我提取数字后数据名词出来,这个交互,我用她填一个config.txt,然后我分析提取名词,按照正则表达式匹配,重复一个名词(这里可以考虑名词排序,二分查找正则匹配函数match()原型:stringObj.match(regExp)有两种使用方式,一种是硬编码匹配stringObj.match(/ddd/),另一种是传入一个字符串,然后生成一个RegExp变量,如下:varitemName=[];itemName[0]="hsa-miR-424";varitemReg=[];itemReg[0]=newRegExp(itemName[0]);\\itemName有名词data.match(itemReg[0]);具体可以参考mdn中的正则表达式过滤规则详解:https://developer.mozilla.org...4.我主要参考节点small2编写的.js读写excel。文件。引入库excel-export来导出excel。基本上就是改了他的exports.write函数,加入了我需要导入的逻辑,因为我第一行每个单元格的内容都是用户输入的,所以也是copy了新的caption。而且有时需要在另一个excel中合并cd274的值。conf就是所有需要导入excel的配置和数据。首先把这个conf里面的值都填上。其中conf.name是工作表名,conf.cols存放的是第一行的单元格信息。conf.rows是后面每一行的信息。然后调用varresult=excelPort.execute(conf)获取写入的二进制数据。最后调用fs.writeFile(filePath,result,'binary',call_back)写入excel。还有一个问题。我发现如果type是number,我的excel是打不开的。我不知道为什么。varexcelPort=require('excel-export');exports.write=function(req,res){//console.log(itemName);变种配置={};conf.name="mysheet";conf.cols=[{caption:'gene_id',type:'string',width:40}];for(leti=0;i