Partage
  • Partager sur Facebook
  • Partager sur Twitter

Lire un fichier de la ligne x jusqu'à la ligne y

Sujet résolu
    11 avril 2019 à 19:11:01

    Bonjour,

    Je suis actuellement en train de coder un petit moteur d'indexation qui analyse une source et qui génère des fichiers d'indexation. Ces fichiers d'indexation contiennent le nombre d’occurrences de chaque mot pour un fichier en particulier. Les mots sont triés dans l'ordre alphabétique.

    Le but final est de faire un moteur de recherche qui va lire ces fichiers d'indexation.

    Maintenant, si l'utilisateur recherche "bananier", je m'en fiche totalement de savoir le nombre d'occurences du mot "anachronisme", je vais simplement chercher tous les mots qui commencent par 'b' (à supposer que je sache à quelle lignes commencent les mots de chaque lettre) et voir si ces mots contiennent "bananier".

    Du coup, si je sais que les mots qui commencent par 'b' vont de la lignes 10 jusqu'à la ligne 14, il y a-t-il moyen de ne lire le contenu du fichier que pour ces lignes ?

    -
    Edité par Raynobrak 12 avril 2019 à 9:10:35

    • Partager sur Facebook
    • Partager sur Twitter
      11 avril 2019 à 19:42:46

      Les systèmes de fichiers "standards", c'est le paradigme de la bande de caractères les uns à la suite des autres, donc pas d'accès "ligne par ligne".

      C'est plutôt le rôle des bases de données de faire ce genre d'indexation.

      • Partager sur Facebook
      • Partager sur Twitter
      Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
        11 avril 2019 à 20:06:58

        Salut !

        Après ce qu'à dit bacelar. Pourquoi ne pas faire une boucle fonctionnant lorsque le nombre de '\n' < 10  && <= 14 ?
        • Partager sur Facebook
        • Partager sur Twitter
          11 avril 2019 à 20:09:34

          Et pourquoi pas une fonction qui lit jusqu'a la ligne X, puis une seconde qui lit les Y lignes suivantes ?

          void readTo(int x, std::ostream & o){
             // lire X ligne
          }

          std::vector<std::string> readlines(int x, std::ostream & o){
             // lire les X lignes suivante et les ajouter au vector
          }

          • Partager sur Facebook
          • Partager sur Twitter
            12 avril 2019 à 9:11:50

            > Et pourquoi pas une fonction qui lit jusqu'a la ligne X, puis une seconde qui lit les Y lignes suivantes ?

            Parce que justement c'est ce que @Raynobrak souhaite éviter.

            • Partager sur Facebook
            • Partager sur Twitter
              12 avril 2019 à 9:16:31

              Re,

              En fait je ne cherche pas à passer les lignes que je ne veux pas, je voulais carrément les ignorer. Mais, comme je m'y attendais, ce n'est pas vraiment possible. C'était juste pour savoir. 

              Je trouverais un autre moyen d'optimiser cela (peut-être en utilisant une BD comme l'a proposé @bacelar).

              Merci à tous pour vos réponses ! :)

              -
              Edité par Raynobrak 12 avril 2019 à 9:16:51

              • Partager sur Facebook
              • Partager sur Twitter
                12 avril 2019 à 11:05:53

                >ce n'est pas vraiment possible.

                Bin si, mais faut faire un peu de travail avant, comme utiliser un système de fichier ad hoc, structurer le contenu des fichiers, utiliser un gestionnaire de données (qui peut très bien utiliser de simple fichiers plats comme repository de données), etc...

                • Partager sur Facebook
                • Partager sur Twitter
                Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.

                Lire un fichier de la ligne x jusqu'à la ligne y

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown