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

Mav*_*ang 2 c# bioinformatics fasta

我有一个含有几种蛋白质序列的FASTA文件.格式就像

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

>protein2
MRSRPAGPALLLLLLFLGAAESVRRAQPPRRYTPDWPSLDSRP
LPAWFDEAKFGVFIHWGVFSVPAWGSEWFWWHWQGEGRPYQRF
MRDNYPPGFSYADFGPQFTARFFHPEEWADLFQAAGAKYVVLT
TKHHEGFTNW*

>protein3
MKTLLLLAVIMIFGLLQAHGNLVNFHRMIKLTTGKEAALSYGF
CHCGVGGRGSPKDATDRCCVTHDCCYKRLEKRGCGTKFLSYKF
SNSGSRITCAKQDSCRSQLCECDKAAATCFARNKTTY`

-----------------------------------
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Kyr*_*yra 5

要做到这一点,一种方法是:

  1. 创建一个向量,其中每个位置都包含名称和序列
  2. 逐行浏览文件

    • 如果行开头,>则在向量的末尾添加一个元素,并将line.substring(1)作为蛋白质名称保存到元素中.将元素中的序列初始化为相等"".
    • 如果line.length == 0则为空,不执行任何操作
    • 否则该行不以> 它开始,那么它是序列的一部分所以去当前向量element.sequence + = line.因此,方式之间的每条线>protein2>protein3连接并保存到序列中protein2


ckr*_*mer 5

我认为关于确切文件结构的更多细节可能会有所帮助。看看你所拥有的(并快速浏览一下维基百科上的样本)表明蛋白质的名称前面有一个>,然后至少有一个换行符,所以这将是一个很好的起点。

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

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

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);
}
Run Code Online (Sandbox Code Playgroud)

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