1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
| #include <iostream>
#include <fstream>
#include <vector>
using namespace std;
struct mystruct
{
string id, s;
};
int readfasta ( string filename ) {
//3 variables utilsées plus tard
string line, identifiant, seq;
mystruct obj;
// ouvre le fichier (et le converti en tableau de char, car ifstream ne prends par les strings)
ifstream fichier(filename.c_str());
// teste si fichier ok (bon chemin, etc...)
if (!fichier) {
cout<<"Probleme avec fichier";
}
// lit chaque ligne du fichier
while( getline( fichier, line ) ){
// si on tombe sur une nouvelle proteine (=>nouvel identifiant) ou ligne vide
if( line.empty() || line[0] == '>' ){
if( !identifiant.empty() ){ // si identifiant déja mémorisé au moins une fois
cout << identifiant << " \n " << seq << "\n\n"; //affiche l'id et la sequence précedement mémorisée
identifiant.clear(); //efface ce qu'il y a dans identifiant
}
if( !line.empty() ){
//memorise l'identifiant (sauf premier caractere c.a.d. le ">")
identifiant = line.substr(1);
//note : on peut couper au caratere "|" pour raccourcir l'id, en faisant :
identifiant=identifiant.substr(0, identifiant.find("|"));
obj.id=identifiant;
}
seq.clear(); // efface la sequence precedente (si elle existait avant)
}
//si pas de ligne avec identifiant et variable identifiant vide => c'est une ligne avec la sequence
else if( !identifiant.empty() ){
seq += line;
obj.s=seq;
}
}
// affichage pour la derniere sequence du fichier
if( !identifiant.empty() ){
cout << identifiant << " \n " << seq << "\n";
}
return 0;
}
int main() {
readfasta("seq_mimivirus.faa");
return 0;
} |
Partager