IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Parcourir fichier et stokage dans vector<struct> puis iteration


Sujet :

C++

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Mars 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 20
    Points : 6
    Points
    6
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre émérite
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 852
    Points : 2 298
    Points
    2 298
    Par défaut
    Pour te faciliter la vie tu devrais déjà tout stocké dans un vector<std::string> avec chaque ligne de ton fichier à l'intérieur, comme ça les conditions seront bien plus simples.

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Mars 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 20
    Points : 6
    Points
    6
    Par défaut
    J'ai fait une classe qui parcour mon fichier et le récupéré dans un vector mais ca march pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    vector<seq> seq::Open(const string &adresse){
     
     
        vector<seq> seqF;
        vector<string> r;
        ifstream fichier(adresse.c_str());
        if(!fichier){
            cout << "Erreur:." << endl;
        }
     
        else{
     
            int i=0;
            string line, d(""), r("");
            while (getline(fichier, line)){
     
                if (!line[0]=='!' ){
                    fichier.close();
                    cout << "format incorrecte!!!" << endl;    
                }
                else{
                    if (line[0]=='!'){
                        seqF.push_back(seq(d,r));
                        d=line;
                        i=1;
                    }
                    else{
                        r+=line;
                    }
                }
            }
            seqF.push_back(seq(d,r));
        }
        return seqF;
    }


    j'arrive pas à la débloquer, si vous pouvez y jeter un coup d'oeil

    Je vous remercie

Discussions similaires

  1. Réponses: 6
    Dernier message: 31/12/2014, 17h17
  2. Réponses: 43
    Dernier message: 29/11/2004, 16h27
  3. [Fichiers] Enregistrer/Déplacer dans un répertoire
    Par babyboy dans le forum Entrée/Sortie
    Réponses: 19
    Dernier message: 12/05/2004, 14h33
  4. Réponses: 1
    Dernier message: 19/08/2003, 16h11
  5. [Kylix] Ouvrir un fichier en étant dans KYLIX
    Par Jackepsi dans le forum EDI
    Réponses: 2
    Dernier message: 05/11/2002, 15h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo