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'.\n");
while ($line = <$file>) {
chomp($line);
my $key; my $value;
($key, $value) = split(/=/, $line, 2);
}
close($file);
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Che Averell
Guillaume GOURDIN écrit :
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
Guillaume GOURDIN <trash@hotmail.com> écrit :
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 !
}
}
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 ! } }