Parcourir fichier et stokage dans vector<struct> puis iteration
Bonjour,
Je débute en C++ et je dois faire un programme en C++ de manière à stoker un fichier en un tableau à deux dimensions.
Mon fichier est organisé comme suit ( i contient un nombre inconnu d’identifiant mais très grand)
!identifiant1
descriptif sur plusieurs lignes
!identifiant61
descriptif sur plusieurs lignes
Le but est de charger dans un vector de structure défini avec les identifiants qui commencent tous par ! dans un header et les ligne qui suivent (descriptif sur plusieurs lignes) jusqu'au prochain ! dans une séquence
il n'ya pas obligatoirement de saut de ligne entre identifiant et descriptif ( c'est aléatoire)
après je dois itérer le vector de classe pour l'afficher et compter la taille de chaque dimension...c'est juste le pétrain
MOn code bloque à plusieurs niveaux (chargement du fichier et création du vector, itération)
voici mon soit disant code
Code:
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 77 78
|
typedef struct {
string header;
vector<string> sequence;;
} FASTAseq;
int main()
{
string adresse = "Fasta.fasta";
vector<FASTAseq> seqF;
vector<string> sequence;
ifstream fasta_file ( adresse.c_str() );
//cout << sizeof(struct seq)<< endl;
if ( !fasta_file ) {
cout << "Erreur: impossible d'ouvrir le fichier (Mauvais chemin d'accès)." << endl;
}
else
{ vector<string> seqF1;
while ( !fasta_file.eof() )
{
seqF1.push_back ( "" ); //creation d'une ligne vide
getline ( fasta_file, seqF1.back() ); //lecture d'une ligne du fichier
int line = seqF1.size() - 1;//je recupere la taille du tableau (-1 pour la ligne 0)
if ( seqF1[line].empty() ) //si la ligne est vide
seqF1.pop_back();//on la retire du tableau
}
cout << "nombre de lignes : " << seqF1.size() << endl;//j'affiche le nombre de lignes pour test
}
if ( fasta_file ) {
//Permet de vérifier si un fichier texte existe et de stocker la définiton dans d
unsigned int i = 0;
string line, header, sequence;
while ( getline ( fasta_file, line ) ) {
if (line.empty())
continue;
line.erase(0, line.find_first_not_of(" \t\r\n\v\f"));
if ( line[0] == '!' && line.size() != 0 ) {
fasta_file.close();
cout << "Ce fichier n'est pas au format FASTA!!!" << endl; //Peut-être utilisation curseur
}
else {
if (line[0] == '!' ) {
cout << "Ce fichier est pas au format FASTA!!!" << endl;
header = line;
seqF.push_back(line));
i = 1;
}
else {
sequence += line;
}
}
}
seqF.push_back(FASTAseq(header,sequence));
}
//début itération
std::vector<FASTAseq>::iterator iter;
for(iter =seq.begin(); iter != seq.end(); ++iter)
{
}
} |
Je vous remercie de bien vouloir me donner des pistes.
Bonne journée