#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
//Incluse supplémentaire
#include <list> //https://en.cppreference.com/w/cpp/container/list
using namespace std;
/*************************************************************/
/************************Class********************************/
/*************************************************************/
class Fichier_Fasta
{
public:
string name;
std::list<string>valeur;
};
class Sequence
{
public:
int numero_sequence;
string name;
string valeur;
string rappel;
string qualiter;
};
class All_Sequence
{
public:
std::list<Sequence> list;
};
/*************************************************************/
/********************Fin Class********************************/
/*************************************************************/
string chemin;
string sequence;
Fichier_Fasta mon_fichier;
All_Sequence all_seq;
bool readFile(string chemin)
{
bool IsOk = false;
cout<<"le chemin est : "<<chemin;
ifstream fichier(chemin);
if(fichier)
{
mon_fichier.name = "123.txt";
cout<<"Lecture du fichier en cours ..."<< "\n";
string ligne;
while(getline(fichier, ligne))
{
mon_fichier.valeur.push_back(ligne);
}
bool IsOk = true;
}
else
{
cout << "ERREUR: Impossible d'ouvrir le fichier en lecture." << endl;
}
return IsOk;
}
int main ()
{
int numero_sequence = 0;
int line = 0;
int ligne =0;
bool IsQualiter;
cout<<"Donner le chemin vers le fichier"<< "\n";
cin>> chemin;
readFile(chemin);
//mon_fichier.name = "toto.txt";
// mon_fichier.valeur.insert("@balajbvfjnvoifnoijdgbenfpod \n");
// mon_fichier.valeur.insert(";jfivnjienvnfjfb \njfvuiviubeiufvbkj123 \n+123jfvuiviubeiufvbkj \njfvuiviubeiufvbkj \n@balajbvfjnvoifnoijdgbenfpod\njfivnjienvnfjfb\njfvuiviubeiufvbkj\n");
//Fichier FastA
if(mon_fichier.valeur[ligne].find('>',0) || mon_fichier.valeur[ligne].find(';',0) )
{
///OBJ Sequence
Sequence my_seq;
for(ligne = 0; ligne < mon_fichier.valeur.size(); ligne++ )
{
string current_line = mon_fichier.valeur[ligne];
if(current_line[0] == '>' || current_line[0] == ';')
{
//enregistrer ancienne sequence si sequence non vide.
// crée nouvelle sequence
numero_sequence++;
if(my_seq.name != "")
{
all_seq.list.push_back(my_seq);
Sequence new_seq;
my_seq = new_seq;
}
my_seq.numero_sequence = numero_sequence; // init numéro sequence.
my_seq.name = current_line; //initialisation du nom
}
else
{
//valeur = concat de toutes les lines de ta sequence.
my_seq.valeur += current_line;
}
}
//Insertion de la dernière sequence dans la liste.
all_seq.list.push_back(my_seq);
cout << "\n fin decoupage du fichier \n" << numero_sequence;
}
//fichier FastQ
else if(mon_fichier.valeur[ligne].find("@",0))
{
///OBJ Sequence
Sequence my_seq;
for(ligne = 0; ligne < mon_fichier.valeur.size(); ligne++ )
{
string current_line = mon_fichier.valeur[ligne];
if(current_line[0] == '@')
{
//enregistrer ancienne sequence si sequence non vide.
// crée nouvelle sequence
numero_sequence++;
if(my_seq.name != "")
{
all_seq.list.push_back(my_seq);
Sequence new_seq;
my_seq = new_seq;
}
my_seq.numero_sequence = numero_sequence; // init numéro sequence.
my_seq.name = current_line; //initialisation du nom
IsQualiter = false;
}
else if(current_line[0] == '+')
{
IsQualiter = true;
my_seq.rappel = current_line; //initialisation du nom
}
else
{
if(IsQualiter == false)
{
//valeur = concat de toutes les lines de ta sequence.
my_seq.valeur += current_line;
}
else
{
//valeur = concat de toutes les lines de ta sequence.
my_seq.qualiter += current_line;
}
}
}
//Insertion de la dernière sequence dans la liste.
all_seq.list.push_back(my_seq);
cout << "\n fin decoupage du fichier \n" << numero_sequence;
}
//Autre
else
{
//pas une ligne de début de séquence.
}
}