C ++,文件i / o ...我有一个.txt文件,我必须从它扫描它的外显子和内含子并将它们写入单独的文件

时间:2013-04-13 07:27:56

标签: c++ arrays string file file-io

程序将从输入文件中依次读取DNA数据,当它遇到外显子和内含子时,它会将它们写入单独的文件中。发现的第一个外显子将写入exon1.txt,发现的第二个外显子将写入exon2.txt,依此类推......同样,发现的第一个内含子将被写入intron1.txt,第二个内含子被发现将被发现写入intron2.txt,依此类推......

外显子是一系列密码子,始终以密码子ATG开始,以以下密码子之一结束:TAA,TGA或TAG。任何不以这些密码子开始或停止的序列都是内含子。在扫描外显子和内含子的数据时,只向前扫描并寻找非重叠的外显子和内含子。如果遇到外显子起始符号(ATG)并且在遇到其中一个终止密码子之前遇到另一个ATG,则不表示新的外显子已经开始。

我知道如何从文件中读取,并且我已将其存储在全局数组中。数组更可取,我也可以使用字符串。

const int MAX_DNA = 50000;
char dnaData[MAX_DNA];


int readFromDNAFile(string fileName) {
 int returnValue = 0;

 ifstream fileHandle;
 fileHandle.open(fileName.c_str());

 if( fileHandle.good() ) {
  char nucleotide;
  int counter = 0;
  while( fileHandle >> nucleotide ) {
   dnaData[counter] = nucleotide;
   counter++;
  }
 returnValue = counter;

 }

 fileHandle.close();
 return returnValue;
}

我真的不知道如何实现下一步该做什么,我确定我必须使用循环为外显子和内含子命名txt文件,然后另一个循环可能用于扫描和存储它..

void readFiles(string filename){
  for(int i = 0; i < numFiles; i++) {
       //ill open up the file here to read 
            for(int j = 0; j < numCodons; j++) {

任何努力都将受到赞赏,谢谢。

2 个答案:

答案 0 :(得分:0)

"im sure i have to use a loop for naming the txt files for exons and introns"

你说你需要为内含子和外显子创建两个文件,所以你真的不需要循环。

int main(){
    ifstream dna("dna.txt");
    ofstream exons("exons.txt");
    ofstream introns("intron.txt");
    while(!dna.eof()){
        string current_line;
        dna >> current_line;
        //if (line belongs to exons){
        // exon1 << current_line  
        //}

        //else(belongs to introns){
        // introns << current_line
        //}
    }

    //close files
}
那不行吗? 我不明白为什么你需要将数据存储在一个数组中。

答案 1 :(得分:0)

如果我理解你的话,除了外显子起始/结束密码子之外你没有其他分界符 - 即新行等不重要吗?

我猜你计划在处理过程中将数据存储在一个数组中,因为如果你启动一个外显子但是没有完成它会算作内含子吗?

但是您不需要将所有数据存储在内存中 - 只需保持两个文件句柄打开即可。在当前外显子的开头留一个,并使用另一个向前扫描。当你到达外显子的末尾时,你可以将它输出到它的文件中。内含子可以立即输出到另一个文件。