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 :

Tri et Extraction de données depuis fichier


Sujet :

C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Tri et Extraction de données depuis fichier
    Bonjour,

    J'ai réalisé un programme me permettant d'ouvrir et de lire un fichier fasta de manière à séparer identifiant et séquence, cela marche, cependant je ne sais pas comment réutilise les variables de manière à les insérer dans un tableau qui comprendrait donc les séquences d'une part et les identifiant d'une autre.

    Voici mon programme :

    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
    #include <iostream>
    #include <fstream>
     
    using namespace std;
     
     
    int readfasta ( string  filename ) {
     
    	//3 variables utilsées plus tard
    	string line, identifiant, seq;
     
    	// 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("|")); 
    			}
     
    			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;
     
    		}
    	}
     
    	// affichage pour la derniere sequence du fichier
    	if( !identifiant.empty() ){ 
    		cout << identifiant << " \n " << seq << "\n"<<endl<<endl;
    	}
     
     
    	return 0;
     
    }
     
     
    int main() {
     
    	readfasta("seq_mimivirus.faa");
     
    	system ("PAUSE");
    	return 0;
     
    }
    J'ai passé énormément de temps à essayer de trouver un moyen pour le réaliser via différentes sources mais sans succès.
    Merci d'avance.

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 590
    Points
    41 590
    Par défaut
    Crée une structure avec séquence et identifiant, puis un conteneur pour ces structures (vector, ou map si tu veux les rechercher par ID, etc.)

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Bonjour, je ne comprend pas très bien l'histoire du conteneur avec vector ou map, pouvez vous me donnez plus d'explications svp

    Cordialement.

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 590
    Points
    41 590
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    struct Mystruct { string line, identifiant, seq; };
     
    ...
     
    vector<Mystruct> allLines;
     
    ...
     
    Mystruct obj;
    obj.line = ...
    obj.identifiant = ...
    obj.seq = ...
    allLines.push_back(obj);

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Je suis désolé mais je ne vois pas ce que je pourrais mettre au niveau de la ligne 3 et 7.

    Cordialement.

  6. #6
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 590
    Points
    41 590
    Par défaut
    Ce n'est pas un code à trous, mais plutôt trois morceaux de code à mettre où il faut.
    La ligne 1 près des en-têtes (voire dans un en-tête), les deux autres morceaux dans ta fonction de lecture...

    Et ne pas oublier le #include <vector> pour avoir la classe vector<> qui marche.

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    D'accord ça marche, merci je vais essayé et je vous tiens au courant

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Bonjour, j'ai intégré une structure dans mon programme à des endroits me paraissant logiques; Cependant j'ai regardé des tutoriels sur les vecteurs mais je ne sais toujours pas où le placer.
    J'aimerai aussi pouvoir visionner le contenu de ma structure, (j'ai essayé le cout et le return, mais cela n'a pas fonctionné) et, plus tard, de mon vecteur.

    Merci d'avance

    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
    #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;
     
    }

Discussions similaires

  1. Extraction de données depuis fichier SIG
    Par villegente dans le forum SIG : Système d'information Géographique
    Réponses: 2
    Dernier message: 28/11/2013, 22h49
  2. [2005] Extraction de données depuis un fichier CSV
    Par alaabed dans le forum SSIS
    Réponses: 3
    Dernier message: 22/04/2011, 15h07
  3. Extraction de donnée depuis un fichier HyperFile
    Par peregna2007 dans le forum VB.NET
    Réponses: 3
    Dernier message: 26/11/2010, 18h24
  4. [AC-2002] [Automation] Erreur Extraction de données depuis un fichier Excel
    Par raph04 dans le forum VBA Access
    Réponses: 30
    Dernier message: 28/04/2010, 15h09
  5. Extraction de données depuis fichier .NDX ...
    Par Olif_C dans le forum WinDev
    Réponses: 4
    Dernier message: 30/08/2005, 12h57

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