OVH Cloud OVH Cloud

[Novice] Parser des fichiers dans plusieurs répertoires et créer une base de donnée

19 réponses
Avatar
noone
Bonjour,

Tout d'abord je suis totalement novice avec Perl.
Je suis en train de réaliser une base d'exercices avec LaTeX.
J'ai un exercice et son corrigé par répertoire. (exercice.tex et
correction.tex)
je voudrais réaliser une base de donnée (un simple fichier texte suffira)

Dans chaque répertoire j'ai créé un fichier index.txt qui à l'allure
suivante

index.txt du répertoire exo00001

%CLASSE=la classe
%DOMAINE=le domaine
...


index.txt du répertoire exo00002
%CLASSE=la classe 2
%DOMAINE=le domaine 2
...


Je ne sais pas comment m'y prendre pour lire tous les fichiers index.txt
et créer la base

index_table.txt

00001 la classe le domaine
00002 la classe 2 le domaine 2
...


Je pense que c'est très basique mais encore faut-il connaitre un minimum
Perl (et peut-être même les regexp aussi)


Autre question...
Avez-vous une meilleure idée d'organisation ?

Parce que je me pose la question :
Et si je change l'organisation des fichiers index.txt par exemple, cela
ne risque pas de merder ?

Il faudrait alors être capable de faire l'inverse : regénérer chaque
index.txt à partir du gros index_table.txt.
=> 2ème script Perl

Et pour les requêtes je m'organise comment ?



Merci d'avance.
et désolé d'avoir été un peu long...

9 réponses

1 2
Avatar
noone
wrote:

j'ai quand même un problème avec ce morceau ("$fileindex.txt")
je suis sous Linux Debian
je pense que le problème viens des ou / dans les répertoires mais
n'existe-t-il pas un moyen de faire quelque chose de portable (Linux
et Windows) pour gérer les répertoires ?



Oooops j'ai lu un peu vite les posts sur f.c.t.t, désolé. D'autres
personnes ont répondus donc cf. leurs réponses ;)



Merci


Avatar
Régis Caspar
wrote:
Encore une autre question...

j'ai maintenant à la fin quelque chose du genre

print OUT "$num$SEP$classe$SEP$domaine$SEP$niveau$SEP$notionsn";

Si il y a un problème cela déclenche l'erreur :

Use of uninitialized value in concatenation (.) or string at
make_index_base.pl line xx


comment traiter ce cas pour qu'il m'indique sur quel numéro est le
problème...


Verifiez les variables concaténée (par ailleurs, le message "Use of..."
n'est pas une erreur mais un warning) :
warn "Probleme dans $file$SEP_DIR"."index.txt n"
if ( !defined($classe) or !defined($domaine)
or !defined($niveau) or !defined($notions) );


--
Régis Caspar

Avatar
noone
Verifiez les variables concaténée (par ailleurs, le message "Use of..."
n'est pas une erreur mais un warning) :


merci pour la nuance

warn "Probleme dans $file$SEP_DIR"."index.txt n"
if ( !defined($classe) or !defined($domaine)
or !defined($niveau) or !defined($notions) );




oui j'ai essayé de mettre ça après le
print OUT "$num$SEP$classe$SEP$domaine$SEP$niveau$SEP$notionsn";

mais ça n'a pas l'air de fonctionner lorsque j'ai un fichier index.txt
comme

%CLASSE=1 S
%DOMAINE %NIVEAU=5
%NOTIONS



et sinon avez-vous une idée pour le problème avec le Makefile qui
s'interromp ?

Avatar
noone
mais ça n'a pas l'air de fonctionner lorsque j'ai un fichier index.txt
comme

%CLASSE=1 S
%DOMAINE > %NIVEAU=5
%NOTIONS >


Désolé c'est normal cela signifie que la chaine est vide...

donc il faut rajouter un test pour ça


et sinon avez-vous une idée pour le problème avec le Makefile qui
s'interromp ?


je n'ai toujours pas d'idée

Avatar
Régis Caspar
wrote:
warn "Probleme dans $file$SEP_DIR"."index.txt n"
if ( !defined($classe) or !defined($domaine)
or !defined($niveau) or !defined($notions) );

oui j'ai essayé de mettre ça après le

print OUT "$num$SEP$classe$SEP$domaine$SEP$niveau$SEP$notionsn";

mais ça n'a pas l'air de fonctionner lorsque j'ai un fichier index.txt
comme
%CLASSE=1 S
%DOMAINE > %NIVEAU=5
%NOTIONS
Ça doit fonctionner mais perl lance un warning (ça fonctionne ici). Il

est possible d'initialiser les variables $classe, ... à '' avant les
expressions régulières, ainsi pas de soucis à la concaténation.

et sinon avez-vous une idée pour le problème avec le Makefile qui
s'interromp ?


Non désolé.


--
Régis Caspar


Avatar
Jogo
Le 30 mars 2005, a écrit dans fr.comp.lang.perl :

et sinon avez-vous une idée pour le problème avec le Makefile qui
s'interromp ?


Si tu as recopié exactement le script de Regis, essais de remplacer le
"exit 1" par un "exit 0" pour voir...

Avatar
noone
Si tu as recopié exactement le script de Regis, essais de remplacer le
"exit 1" par un "exit 0" pour voir...


Merci... désolé je suis bête...
mais je fais un peu de C++ et j'écris return EXIT_SUCCESS;
alors je ne me souvenait pas si la sortie devait être 0 ou 1 (et ça ne
m'avais même pas effleuré l'esprit...)
Merci encore

Avatar
Régis Caspar
wrote:
Merci... désolé je suis bête...
mais je fais un peu de C++ et j'écris return EXIT_SUCCESS;
alors je ne me souvenait pas si la sortie devait être 0 ou 1 (et ça ne
m'avais même pas effleuré l'esprit...)
Merci encore


Bonsoir,

Oui /mea culpa/ c'est moi qui me suis emmêlé les pinceaux avec les codes
de sortie... désolé.

--
Régis Caspar, qui finira bien par retenir que "tout est ok" = "exit 0"

Avatar
noone
wrote:

Merci... désolé je suis bête...
mais je fais un peu de C++ et j'écris return EXIT_SUCCESS;
alors je ne me souvenait pas si la sortie devait être 0 ou 1 (et ça ne
m'avais même pas effleuré l'esprit...)
Merci encore



Bonsoir,

Oui /mea culpa/ c'est moi qui me suis emmêlé les pinceaux avec les codes
de sortie... désolé.



de rien il est extra ce script...


1 2