基因项目小记

来源:互联网 发布:热血战歌翅膀升阶数据 编辑:程序博客网 时间:2024/06/05 17:20

之前的账号总是开不了博客 今天好不容易开了 一定要坚持!


正儿八经做的第一个项目 基因测序

step1:

1 将基因注释文件(.gff3 70MB)导入到MySQL数据库。

load data local infile '文件路径' into table 表名

2 根据注释文件中的信息从测序数据(.fa 940MB)中获取数据。

1 C++对文件进行操作的时候,打开近1G数据文件时会自动杀死进程。所以需要将文件进行分割。将.fa文件导入数据库,每100W行输出为一个.txt文本文件。将分好的文件去掉换行符,存为对应的.txt文件。

cat 1.txt | tr -d "012" > x1.txt

2 注释文件有70W行,若每一行都在13个100W行的文件中查找速度会很慢。注释文件中每一行的纪录排列是有序的。所以在查找之前先进行比对,若与上一行信息一致,则直接利用上一行的数据结果。否则进行查找。查找利用find()函数。

3 将利用fread(), fseek()函数进行数据的定位和指定长度的读取。

3 统计字符串中包含子字符串中个数以及子字符串在字符串中出现的次数。

step2:

1 将元件组合文件(module 70MB)中2-6个组合的情况过滤出来,写到一个文件中,并重新编号从G1开始。

将module文件导入数据库,用C++编写数据库接口,读取的时候按升序读取前5个。写文件名用snprinf()函数,可以很方便的融合变量。

2 在基因元件文件中查找滤出来的组合,每个基因写一行。

3 每个组合对应的基因元件ID,每个组合写一行。

由于数据库中存储的数据格式是text型,但实际上内容是数字,如“ 80 94 56 42 55 35 ”。因此将数据库中内容读出按字符串处理,先按空格将字符串进行分割。

再用两层循环进行比对查找。

需要注意的问题:

1. 读出的内容可能为空,因此需要加if判断语句。

2. 不会运用动态数组,只能先定义固定大小的数据初始化,进行填充,然后运用s1+=s2进行字符串连接。最后存入数据库。不初始化可能出现乱码。

3. 在进行字符串连接的过程中,由于文本是直接从数据文件存入数据库,再从数据库中读出的,可能有换行符或者其他的字符。因此需要利用substr()函数取出相应字段存入数据库。

4. 循环和数组存储的逻辑理解了很久。

step3:

按给定表格抓取网页内容,填入表中。

老师要求用perl LWP模块,还在学习中。同组学弟用的是C#,已经做出来了。需要学习too。

开发环境:linux (ubuntu) 数据库:MySQL 开发语言:C++