在c#中读取FASTA文件的最佳方法

时间:2010-06-22 20:51:05

标签: c# bioinformatics fasta

我有一个含有几种蛋白质序列的FASTA文件。格式类似于

----------------------
>protein1
MYRALRLLARSRPLVRAPAAALASAPGLGGAAVPSFWPPNAAR
MASQNSFRIEYDTFGELKVPNDKYYGAQTVRSTMNFKIGGVTE
RMPTPVIKAFGILKRAAAEVNQDYGLDPKIANAIMKAADEVAE
GKLNDHFPLVVWQTGSGTQTNMNVNEVISNRAIEMLGGELGSK
IPVHPNDHVNKSQ

>protein2
MRSRPAGPALLLLLLFLGAAESVRRAQPPRRYTPDWPSLDSRP
LPAWFDEAKFGVFIHWGVFSVPAWGSEWFWWHWQGEGRPYQRF
MRDNYPPGFSYADFGPQFTARFFHPEEWADLFQAAGAKYVVLT
TKHHEGFTNW*

>protein3
MKTLLLLAVIMIFGLLQAHGNLVNFHRMIKLTTGKEAALSYGF
CHCGVGGRGSPKDATDRCCVTHDCCYKRLEKRGCGTKFLSYKF
SNSGSRITCAKQDSCRSQLCECDKAAATCFARNKTTY`

-----------------------------------

有没有一种好方法可以读取此文件并单独存储序列?

由于

3 个答案:

答案 0 :(得分:5)

要做到这一点,可以:

  1. 创建每个位置的向量 拥有名称和序列
  2. 逐行浏览文件

    • 如果该行以>开头,则添加 向量末尾的元素 并将line.substring(1)保存到 元素作为蛋白质名称。 初始化序列 元素等于""
    • 如果line.length == 0那么它是 空白,什么都不做
    • 否则该行不会以>开头 那么它就是序列的一部分 去当前的矢量element.sequence + =线。因此,>protein2>protein3之间的每一行都是 连接并保存到 序列protein2

答案 1 :(得分:4)

我想也许有关确切文件结构的更多细节可能会有所帮助。只是看看你有什么(并快速查看wikipedia上的样本),表明蛋白质的名称前面有一个>,后面至少有一个换行符,所以这就是一个好的开始。

您可以在换行符上拆分文件,并查找>字符以确定名称。

从那里它不太清楚,因为我不确定序列数据是否全部在一行(没有换行符)或者它是否可能有换行符。如果没有,那么您应该能够存储该序列信息,然后转到下一个蛋白质名称。像这样:

var reader = new StreamReader("C:\myfile.fasta");
while(true)
{
    var line = reader.ReadLine();
    if(string.IsNullOrEmpty(line))
        break;
    if(line.StartsWith(">"))
        StoreProteinName(line);
    else
        StoreSequence(line);
}

如果是我,我可能会使用TDD和一些示例数据来构建一个简单的解析器,然后继续插入样本,直到我觉得我已经涵盖了格式中的所有主要差异。

答案 2 :(得分:2)

你能使用C#以外的语言吗?有很好的库可以处理FASTA文件和Perl,Python,Ruby,Java和R中的其他生物序列(在我的脑海中)。它们通常被标记为Bio *(即BioPerl,BioJava等)

如果您对C或C ++感兴趣,请在Biostar查看此问题的答案: http://biostar.stackexchange.com/questions/1516/c-c-libraries-for-bioinformatics

帮自己一个忙,如果你不需要,不要重新发明轮子。