Lire un fichier de configuration [résolu] - Perl - Programmation
Marsh Posté le 17-07-2008 à 12:11:54
je connais mal appConfig, mais je dirais que cela te retourne des tableaux alors que tu attends des scalaires ( un réglage de ARGCOUNT ptêt).
Essaye ça juste pour vérifier:
Code :
|
Il est assez aisé d'appeler un script sh en perl, le mieux c'est encore de lire la doc
Marsh Posté le 17-07-2008 à 15:03:46
La commande print ref $config->niveau(); ne renvoit rien malheureusement.
Pour appeler un script, j'ai utilisé la commande system() mais à priori cela ne permet de retourner que le code retour $? (pas de chaîne de caractère).. en fait je comptais récupérer les valeurs de mon fichier de conf ainsi, c'est raté.
Une autre solution, j'imagine, serait de lire le fichier en perl et de récupérer les champs via une expression régulière ?
Marsh Posté le 17-07-2008 à 15:19:33
ib@w a écrit : La commande print ref $config->niveau(); ne renvoit rien malheureusement. |
Comment ça renvoie rien??? ça doit forcément afficher quelque chose
ib@w a écrit : Pour appeler un script, j'ai utilisé la commande system() mais à priori cela ne permet de retourner que le code retour $? (pas de chaîne de caractère).. en fait je comptais récupérer les valeurs de mon fichier de conf ainsi, c'est raté. |
mauvaise idée
ib@w a écrit : Une autre solution, j'imagine, serait de lire le fichier en perl et de récupérer les champs via une expression régulière ? |
Oui tu peux aussi faire ça c'est pas bien dur et ça doit s'écrire en 3 lignes:
Code :
|
Maintenant utiliser AppConfig ça reste une excellente idée aussi ...
Marsh Posté le 17-07-2008 à 16:03:55
anapajari a écrit : |
ça donnait avec mon code :
niveau :
rep :
anapajari a écrit :
|
Merci, effectivement avec cela ça fonctionne, mis en forme pour ceux que ça intéresse et pour avoir un exemple concret, voilà ce que j'ai fait (ça pourra pitêtre servir à d'autres noob comme moi ) :
#!/usr/bin/perl
use strict;
system("clear" );
my $file="fichier.config";
open(FIC,$file) || die("Could not open file!" );
my @raw_data=<FIC>;
close(FIC);
my $repertoire="";
my $niveau="";
my %config;
while(<@raw_data> ){
/^\s*(.*?)\s*=\s*(.*?)\s*$/;
$config{$1} = $2;
if ($1 eq "repertoire" )
{
$repertoire=$2;
}
elsif ($1 eq "niveau" )
{
$niveau=$2;
}
}
print "repertoire=",$repertoire,"\n";
print "niveau=",$niveau,"\n";
J'étais parti sur une autre solution qui s'en rapproche :
#!/usr/bin/perl
use strict;
system("clear" );
my $file="fichier.config";
open(FIC,$file) || die("Could not open file!" );
my @raw_data=<FIC>;
close(FIC);
my $repertoire="";
my $niveau="";
foreach my $wrestler (@raw_data)
{
chomp($wrestler);
(my $var,my $value)=split(/\=/,$wrestler);
if ($var eq "repertoire" )
{
$repertoire=$value;
}
elsif ($var eq "niveau" )
{
$niveau=$value;
}
}
print "repertoire=",$repertoire,"\n";
print "niveau=",$niveau,"\n";
Résultat à l'écran :
repertoire=/tmp
niveau=26
Je ne sais pas si c'est du code très optimisé mais ça fonctionne.
Marsh Posté le 22-07-2008 à 03:42:17
Les exemples de la doc étaient pourtant assez simples.
Code :
|
Ca marche tres bien.
Un truc comme ceci en perl: 'niveau' => ARGCOUNT => 1 avec deux => successifs, ca a peu de chances de marcher.
Par contre, c'était peut être quelque chose comme ceci que tu voulais faire:
Code :
|
A+,
Marsh Posté le 22-07-2008 à 11:17:38
Arfff mes sources n'étaient pas bonnes http://docs.mandragor.org/files/Mi [...] onfig.html ...
Merci pour la correction, je leur ai envoyé un petit mail aussi.
@+
Marsh Posté le 17-07-2008 à 11:33:46
Bonjour,
Je souhaite lire le contenu d'un fichier de configuration dans un script perl. J'utilise pour cela le module AppConfig.
Mon fichier test.pl
#!/usr/bin/perl -w
use Getopt::Std;
use AppConfig qw(:expand :argcount);
my $config = AppConfig->new('niveau' => ARGCOUNT => 1,'repertoire' => ARGCOUNT => 1);
$config->file('fichier.config');
print "niveau : ", $config->niveau(), "\n";
print "rep : ", $config->repertoire(), "\n";
Mon fichier de config
# mon fichier de config
niveau=26
repertoire=/tmp
Le problème c'est qu'à l'exécution j'obtiens ce résultat :
niveau : 1
rep : 1
Alors que je souhaiterais récupérer 26 et /tmp.
Auriez-vous une idée de ce qui n'est pas correcte dans mon script ?
Je précise que je ne connais pas bien perl.
Autre question : est-il possible d'appeler un script sh à partir d'un script perl ? et de récupérer en retour de cet appel des données
Merci d'avance,
Message édité par ib@w le 06-08-2008 à 10:31:04