首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++,文件I/O...我有一个.txt文件,我必须扫描它的外显子和内含子,并将它们写到单独的文件中

C++,文件I/O...我有一个.txt文件,我必须扫描它的外显子和内含子,并将它们写到单独的文件中
EN

Stack Overflow用户
提问于 2013-04-13 15:27:56
回答 2查看 160关注 0票数 0

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

外显子是一个密码子序列,总是以密码子ATG开始,以以下密码子之一结束: TAA、TGA或TAG。任何不以这些密码子开始或终止的序列都是一个内含子.While,它扫描数据中的外显子和内含子,只向前扫描并寻找不重叠的外显子和内含子。如果遇到一个外显子起始符号( ATG ),并且在遇到一个终止密码子之前遇到另一个ATG,这并不意味着新的外显子已经启动。

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

代码语言:javascript
运行
复制
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文件,然后再使用另一个循环来扫描和存储它。

代码语言:javascript
运行
复制
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++) {

任何努力都将受到感谢,谢谢。

EN

回答 2

Stack Overflow用户

发布于 2013-04-13 15:43:16

代码语言:javascript
运行
复制
"im sure i have to use a loop for naming the txt files for exons and introns"

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

代码语言:javascript
运行
复制
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
}

这不是很好吗?我不明白为什么需要将数据存储在数组中。

票数 0
EN

Stack Overflow用户

发布于 2013-04-13 15:55:30

如果我没理解错的话,除了外显子开始/结束密码子之外,你没有其他的分隔符--换行等不重要?

我猜你计划在处理过程中将数据存储在一个数组中,因为如果你启动了一个exon,但没有完成它,那么它就会被算作一个内含子?

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15985394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档