0

プログラムは、入力ファイルから DNA データを順次読み取り、エクソンとイントロンに遭遇すると、それらを別々のファイルに書き出します。最初に発見されたエクソンは exon1.txt に書き込まれ、2 番目に発見されたエクソンは exon2.txt に書き込まれます。同様に、最初に発見されたイントロンは intron1.txt に書き込まれ、2 番目に発見されたイントロンはintron2.txt などに書き込まれます...

エクソンは、常にコドン ATG で始まり、TAA、TGA、または TAG のいずれかのコドンで終わる一連のコドンです。これらのコドンで開始または停止しない配列はすべてイントロンです。データをスキャンしてエクソンとイントロンを探している間は、前方のみをスキャンして、重複していないエクソンとイントロンを探します。エクソン スタート シンボル (ATG) が検出され、停止コドンの 1 つが検出される前に別の 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++) {

どんな努力も感謝します、ありがとう。

4

2 に答える 2

0

私の理解が正しければ、エクソンの開始/終了コドン以外に区切り文字はありません。つまり、改行などは重要ではありませんか?

処理中にデータを配列に保存することを計画していると思いますが、エクソンを開始しても終了しないとイントロンとしてカウントされるためですか?

ただし、このためのすべてのデータをメモリに格納する必要はありません。2 つのファイル ハンドルを開いたままにしておくだけです。1 つは現在のエクソンの開始位置のままにし、もう 1 つは順方向にスキャンするために使用します。エクソンの最後に到達したら、それをファイルに出力できます。イントロンはすぐに別のファイルに出力できます。

于 2013-04-13T07:55:29.970 に答える