Pour un projet scolaire je dois indexer des fichiers texte dans une base de donnée. Cette base contient plusieurs informations sur chaque fichier et notamment tous les mots récupérer dans les dits fichiers.
Une partie du projet consiste à rechercher ces mots.
Nous sommes libres de représenter la BDD comme nous le voulons. Dans mon cas j’ai choisi cette forme :
Un exemple sera plus concret, ici un fichier contient le mot "bonjour" à la ligne 1, 2 et 3 qu'il apparaît 3 fois. Mais aussi le mot "hello" qui lui apparaît à la ligne 4 et 5 et donc apparaît 2 fois:
:bonjour-1,2,3-3:hello-4,5-2:
Ainsi lorsque l'utilisateur recherche "bonjour", je dois extraire exclusivement la partie correspondante au mot:
:bonjour-1,2,3-3:
Je me suis intéressé aux commandes permettant d'extraire des données et plus précisément à grep et sed, j'ai essayé de nombreuse combinaison et malheureusement à chaque fois grep et sed me renvoient toutes la ligne correspondante ainsi
La commande me renvoie bien les lignes contenant le mot "bonjour" mais aussi les autres mots associées à un fichier...
Je ne peux utiliser "cut" pour découper la partie voulut, car le mot indexé ne se trouvera pas toujours au même endroit et je ne peux modifier la syntaxe de ma BDD car tout mon projet et construit comme ça...
J'ai bien l'impression que j'utilise mal ces commandes, mais je ne sais pas quoi tenter de plus. ^^'
il me semble que ta manière de stocker les données n'est pas correcte.
normalement, un enregistrement (une ligne) correspond à une donnée (dans ton cas un mot) qui contiendra toutes ou presque ses descriptions.
pour identifier à quel fichier appartient tel mot, il faut soit créer un autre fichier qui contiendra la liste des fichiers avec un numéro d'ordre, et utiliser ce numéro pour indiquer dans le fichier mots pour chaque mot à quel fichier il appartient, soit indiquer le nom du fichier devant chaque mot (se qui alourdira le fichier).
il te faut donc faire quelques recherches supplémentaires sur la structure des bases de données.
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
^ hash md5 ^ arborescence du fichier ^^ nom^ mot(s) contenu(s) dans ce fichier ^
Comme tu peux le constater toutes les informations du fichier sont bien dans la BDD.
J'ai donc bien accès à toutes les informations des fichiers. Mais comme indiqué dans mon premier post je n'arrive pas à extraire les informations à propos d'un mot exclusivement.
Dès lors j'aurai passé cette étape je pourrais regrouper toutes les informations afin de pouvoir dire dans quels fichiers se trouve un mot et a quelle endroit.
àmha, tu ne prends pas le problème dans le bons sens, et tu va être confronté à de plus en plus de difficultés dont les solutions ajouteront d'autres problèmes. un simple fichier ne constitue pas une base de données, il ne s'agit que d'une table de données. c'est pourquoi je te recommandais de réviser la structure de ta base de données.
bon.
si tu veux manipuler les résultats retournés par une regex, il faut utiliser un vrai langage plutôt qu'un simple grep : sed, awk, perl, python...
parce que tu pourrais aussi avoir
:hello-4,5-2:bonjour-1,2,3-3:
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Concernant la structure comme indiqué dans mon post initial je ne peux pas la changer c'est bien le problème sinon je ne m’obstinerai pas.
La commande sed je l'ai aussi essayé (certainement pas comme il faut) et impossible d'obtenir un résultat qui me convient la commande me renvoie elle aussi la ligne en entier.
Il ne me reste plus que awk, perl et python m'étant interdit nous avons comme consigne de ne pas utiliser d'autres langages de programmation...
Mais impossible de trouver un tutoriel qui est capable de m'expliquer ce que je veux faire... Si tu as des pistes à me proposer je suis preneur.
Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.
Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre. En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.
Au lieu de déterrer un sujet il est préférable :
soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
soit de créer un nouveau sujet décrivant votre propre contexte
ne pas répondre à un déterrage et le signaler à la modération
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique
Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique