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 :

Fichiers d'indexations ?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2011
    Messages : 79
    Par défaut Fichiers d'indexations ?
    Bonjour, je vais vous mettre en situation, J'ai un fichier texte population qui contient des informations de Citoyens et de professionnel de la santé

    Citoyen -> Numéro unique / Nom / Date Naissance
    Professionnel de la santé -> Numéro unique / Nom / Date Naissance / Code Pro Santé / Titre

    Dans l'énoncé de mon travail il y a sa :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Les accès initiaux aux données se feront séquentiellement. Cependant, chaque recherche initiale 
    produira un index et si le même accès est redemandé, cette fois, on passera par un accès 
    indexé. 
    Avant d’exécuter un accès indexé, le système doit vérifier que l’index est plus récent que les 
    données. Si ce n’est pas le cas une indexation devra être relancée avant de procéder à l’accès.  
    Vos fichiers de données doivent respecter la nomenclature fournie; 
    Vos fichiers de données doivent ce trouver sur c:\utopia\données\; 
    Les fichiers d’index que vous produirez devront être créés sur c:\utopia\index\; 
     Le programme n’a pas à demander à l’utilisateur où se trouvent les fichiers. Le programme lira 
    directement dans le répertoire c:\utopia et s’attendra à y trouver les fichiers de données et les 
    fichiers d’index;
    C'est quoi cette affaire de fichier d'index ? mon prof ma envoyé un exemple de code mais je ne comprend pas plus c'est quoi.

    Voici l'exemple :

    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
    79
    80
    81
    82
    83
    84
    85
    86
    87
    #include <iostream>
    #include <string>
    #include <fstream>
     
    using namespace std;
     
    const string fichData = "D:\\Atelier3A6\\fichierIndexé\\d";
    const string fichIndex = "D:\\Atelier3A6\\fichierIndexé\\index";
    void rechercheNonIndexe(string strCrit) {
    	ifstream ifEntree(fichData,ios::in);
    	string strCourant;
     
    	while(ifEntree.good()) {
    		getline(ifEntree, strCourant);
    		if (!strCourant.find(strCrit)) {
    			int pos = strCourant.find(',');
    			string fourCode = strCourant.substr(0,pos);
    			string fourNom = strCourant.substr(pos+1);
    			cout << "séquentiel: " << fourCode << " " << fourNom << endl;
    			break;
    		}
    	}
    	ifEntree.close();
    }
     
    void indexation() {
    	ifstream ifEntree(fichData,ios::in);
    	ofstream ofIndex(fichIndex,ios::out);
    	string strCourant;
    	int posTotale = 0;
     
    	while (ifEntree.good()) {
    		getline(ifEntree, strCourant);
    		if (!strCourant.find("four-")) {
    			int pos = strCourant.find(',');
    			string fourCode = strCourant.substr(0,pos);
    			string fourNom = strCourant.substr(pos+1);
    			ofIndex << fourCode << ": " << posTotale << endl;
    			cout << ".";
    		}
    		posTotale += strCourant.length();
    		posTotale += 2;					// Ajouter le \n qui compte pour 2
    	}
    	cout << "indexation terminée" << endl;
    	ifEntree.close();
    	ofIndex.close();
    }
     
    void rechercheIndexe(string strCrit) {
    	ifstream ifIndex(fichIndex,ios::in);
    	string strCourant;
    	int positionTotale = 0;
     
    	while(ifIndex.good()) {
    		getline(ifIndex, strCourant);
    		if (!strCourant.find(strCrit)) {
    			int pos = strCourant.find(':');
    			string fourCode = strCourant.substr(0,pos);
    			string strPositionData = strCourant.substr(pos+1);
    			ifstream ifEntree(fichData,ios::in);
    			int iPositionData = stoi(strPositionData);
     
    			ifEntree.seekg(iPositionData);
    			string strLigneData;
    			getline(ifEntree, strLigneData);
    			pos = strLigneData.find(',');
    			fourCode = strLigneData.substr(0,pos);
    			string fourNom = strLigneData.substr(pos+1);
    			cout << "indexé: " << fourCode << " " << fourNom << endl;
    			ifEntree.close();
    			break;
    		}
    	}
     
    	ifIndex.close();
    }
     
    void main() {
    	setlocale(LC_ALL,"");
     
    	for (int i =0;i<20;i++)
    		rechercheNonIndexe("four-3");
    	indexation();
    	for (int i =0;i<20;i++)
    		rechercheIndexe("four-3");
     
    }

  2. #2
    Membre Expert Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Par défaut
    Salut,

    Il existe plusieurs sortes d'index mais par exemple tu pourrais considérer, si tu as une liste alphabétique de mot, un index sur la première lettre. Donc par exemple si tu as le mot "Salut", au lieu de démarrer de tout en haut de ton fichier et de lire tous les mots jusqu'à salut (séquentiellement) tu regardes dans ton index où commence la lettre "S" (index qui associe "S" au décalage du fichier en octets) et tu lis ton fichier de lettre à partir de cette lettre en faisant le décalage. Bien sûre il faut que tu fasses une lecture séquentielle sur ton index…

Discussions similaires

  1. [HTACCESS] Fichier d'index
    Par chelsea23 dans le forum Apache
    Réponses: 5
    Dernier message: 13/01/2007, 18h09
  2. Réponses: 1
    Dernier message: 23/11/2006, 10h53
  3. [Débutant]pb de fichier - array index out of bounds exception
    Par TheBlue dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 12/06/2006, 20h24
  4. fichiers séquentiels indexés VS base de données relationnell
    Par Clotilde dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 22/08/2005, 06h31

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