Pb pour filtrer des données
Bonjour,
Je suis plutôt débutant en perl, et essaie de développer un script servant à me créer des fiches de vocabulaire pour m'aider dans l'apprentissage d'une langue que j'étudie.
Je note mon vocabulaire sur un fichier texte sous le format suivant (avec encore d'autres spécifications, que je ne vais pas mettre par souci de clarté) :
mot1Langue1;mot1Langue2;natureDuMot;champLexical;
mot2Langue1;mot2Langue2;natureDuMot;champLexical;
...
Le but de mon script est de pouvoir filtrer les données de ce fichier, et créer une fiche de vocabulaire correspondant aux choix définis par l'utilisateur.
Par exemple, me sortir une fiche avec tous les adjectifs correspondant au champ lexical "couleur"
J'ai donc, au début de script, ce genre de chose :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| ### On ouvre le fichier ou se trouve la liste de vocabulaire
open (LISTE, 'dbvoc.txt');
### Quel type de mot nous intéresse
print "Nature \n";
my $nature = <stdin>;
chomp($nature);
### Quelle thématique nous intéresse
print "Champ lexical \n";
my $chplex = <stdin>;
chomp($chplex); |
De la même façon, on nous pose 2 autres questions pour définir la forme finale de la fiche à sortir.
Ensuite, j'ouvre le fichier dans lequel je vais copier mes données :
Code:
1 2
| ### On ouvre / créé le fichier dans lequel sera copie le vocabulaire.
open (FICHEVOC, '>mafiche.txt'); |
Le nom de la fiche sera dynamique, selon les critères demandé (mais il faut encore que je m'en occupe)
Arrive finalement le moment où je dois filtrer mes recherches et les copier dans le fichier.
Dans la version d'essai, je n'avais qu'une condition, et ça marchait très bien :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| ### Boucle pour inscrire les données filtrées dans la fiche de vocabulaire
my $cols;
my $ligne;
while($ligne=<LISTE>)
{
### On se sert des ; séparant les données du fichier pour les mettre dans un tableau
@cols = split(";",$ligne);
### Si la nature du mot correspond à celle demandée, on inscrit les données du mot dans la fiche
if ($cols[2] eq $nature)
{
print FICHEVOC "\n$cols[0] - $cols[1] - $cols[2] - $cols[3] \n";
}
}
### On ferme les documents ouverts
close (FICHEVOC);
close (LISTE); |
Ca me sort donc un document avec une liste de tous les mots correspondant à la nature demandée.
Seulement, puisque je voudrais maintenant prendre en compte plusieurs critères, ça n'est forcément plus si simple, et j'avoue arriver à cours d'idées concernant la marche à suivre pour y parvenir... Si quelqu'un avait une piste à me conseiller, je lui offrirai beaucoup, beaucoup de gratitude.
--EDIT--
J'ai oublié de préciser ce qui pose vraiment problème : c'est qu'il est également nécessaire que l'on puisse ne pas spécifier toutes les conditions de recherche... Par exemple, ne demander que de sortir une fiche sur les adjectifs, ou encore, ne demander qu'une fiche sur le champ lexical de la couleur en général