split

Le
Guillaume GOURDIN
Bonjour à tous, je suis débutant en PERL, et je voudrais parser un
ficher de type:
key1=value1
key2=value2

J'ai écrit le code suivant qui semble marcher correctement si la ligne
est bien formatée, mais je voudrais gérer le cas où le split ne
fonctionne pas correctement à cause d'une ligne mal formatée. Comment
dois-je m'y prendre? Merci pour votre aide.


open( $file, $config_file ) or die("Error : failed opening file
'$config_file'.");
while ($line = <$file>) {
chomp($line);
my $key; my $value;
($key, $value) = split(/=/, $line, 2);
}
close($file);
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Che Averell
Le #17344271
Guillaume GOURDIN
Bonjour à tous,



Hello,

je suis débutant en PERL, et je voudrais parser un
ficher de type:
key1=value1
key2=value2



Y'a pas un module tout fait pour gérer ce genre de choses ?

Premier reflexe à avoir, chercher dans http://search.cpan.org si y'a
pas un module tout fait pour faire ce qu'on a à faire...

J'ai écrit le code suivant qui semble marcher correctement si la ligne
est bien formatée, mais je voudrais gérer le cas où le split ne
fonctionne pas correctement à cause d'une ligne mal formatée. Comment
dois-je m'y prendre? Merci pour votre aide.
open( $file, $config_file ) or die("Error : failed opening file
$config_file'.n");
while ($line = <$file>) {
chomp($line);
my $key; my $value;
($key, $value) = split(/=/, $line, 2);
}
close($file);



Voilà ce que j'aurais fait (pas testé, pas compilé, rien, juste
directement tapé dans le message). L'idée, en gros, est plutôt
d'utilier une regexp plutôt que split :

while (<$file>) {
chomp;
# Supprimer les commentaires (c'est un ajout par rapport à la
# demande, cadeau !) :
s/#.*$//;
# ignorer les lignes vides :
next if (/^s*$/);
if (/^(.*)=(.*)$/) {
$key = $1;
$value = $2;
# Suite du traitement
} else {
# erreur !
}
}


HTH
Publicité
Poster une réponse
Anonyme