数学建模_国2000A——DNA序列问题中的数据处理

来源:互联网 发布:生成对抗网络发展 编辑:程序博客网 时间:2024/06/03 23:44

2000年A题 DNA序列 中的数据处理

具体针对的是题目数据中的Nat-model-data.txt,数据量较大,我不贴了,放个链接感受下。link

那么如何进行数据处理才能让这个数据为我们所用呢?

我的思路是:
观察数据发现整个数据都是关于ATGC的基因序列,共有182个,且每个序列长度都不相同,共同特征是初始字符为数字(数字个数不定)接着为字符“:>”基因序列从后面开始。结尾为空字符。于是思路为将每个基因序列放在元组的一行,元组共182行1列。具体算法为写一个循环,逐行读入字符,若开头为数字,即继续查找直到当前字符为字母,即基因开始,结束的标志为空白行,将所有读入的字母拼接为一个完整的基因序列,存入元组中的一行。

具体程序

clcclearclose allfid=fopen('Nat-model-data.txt','r'); result='';%每个基因的暂存变量j=1;dna{182,1}=0;%182个基因的储存元组while(~feof(fid))    data=fgetl(fid);%读取一行    if isempty(data)%若该行为空白行,则continue,读下一行        dna{j,1}=result;        (Copyright © http://blog.csdn.net/s_gy_zetrov. All Rights Reserved)        j=j+1;        result='';        continue    else%若该行不是空白行,则查找数字和‘:>’字符        for i=1:length(data)            if (data(i)>=48&&data(i)<=57)                i=i+1;            elseif (data(i)==58||data(i)==62)                i=i+1;            else%当当前字符为字母时,取出余下所有字符,存入tmp中                tmp=data(i:length(data));                result=[result,tmp];%将基因的所有行拼接为一整行,等待存入基因元组中                break%结束当前字符查找,回到大循环            end        end    endend(Copyright © http://blog.csdn.net/s_gy_zetrov. All Rights Reserved)

程序能正确将全部182个记忆序列存储到182*1的基因元组中,具体单个基因序列的调用方式为dna{n,1}

有一个小bug是需要在Nat-model-data.txt的结尾加入一行字符如” this is the end of this file.”,否则则只能读入181个基因。不过这个bug由于可以绕过,不影响使用,所以我也就没再仔细查。

(Copyright © http://blog.csdn.net/s_gy_zetrov. All Rights Reserved)


visitor tracker
访客追踪插件


some people just aren’t meant to be together. Or it’s not the time yet. like us, HuaHua, we are more than friends but always below lovers. Today is my blogs’ 1-year-birthday. I’m moving on. At least for now. Maybe in a year or two, but who knows? Who noes~

原创粉丝点击