Perl - obtenir le premier “mot” de la chaîne d'entrée
Je suis en train d'écrire un programme en Perl qui lit dans les lignes d'un fichier texte, et, pour chaque ligne, extraire le premier "mot" de la ligne, et d'effectuer une action différente en fonction de la chaîne qui revient.
La boucle principale ressemble à ceci:
while(<AXM60FILE>) {
$inputline = $_;
($start) = ($inputline =~ /\A(.*?) /);
perform something, based on the value of string in $start
}
Le fichier d'entrée est en fait un fichier de paramètres, avec la parameter_name et parameter_value, séparés par un deux-points (":"). Il peut y avoir des espaces ou des tabulations avant ou après la virgule.
Ainsi, le fichier se présente (par exemple) comme suit:
param1: xxxxxxxxxxxx
param2 :xxxxxxxxxxxxx
param3 : xxxxxxxxxxxxxxxxx
param4:xxxxxxxxxxxxx
Que "($start) = ($inputline = ~ /\(.*?) /);" ok pour le "param2" exemple et le "param3" exemple où le 1er mot est terminé par un espace/espace, mais comment puis-je gérer les "param1" et "param4" des situations, où le parameter_name est suivi immédiatement par le colon?
Aussi, si les "espaces" est un onglet ou des onglets, au lieu de vide/caractère d'espace?
Grâce,
Jim
OriginalL'auteur user555303 | 2011-02-11
Vous devez vous connecter pour publier un commentaire.
Cela permettra de couvrir l'ensemble de vos affaires et puis certains:
(Ou, en anglais, split
$inputline
dans un maximum de deux éléments séparés par une quantité d'espaces, un deux-points et le montant de l'espace.)OriginalL'auteur Blrfl
Cela va correspondre à rien, sauf les espaces et les
:
au début de la ligne.Ou à l'aide de
split
:Eugene, j'ai fait plusieurs tests à l'aide de votre 1ère suggestion, et je voulais confirmer: Par "espace", onglet caractères inclus? Aussi, pouvez-vous expliquer comment cette regex vous utilisé fonctionne, brièvement? Jim
Salut, je crois que je suis un peu confus au sujet de qui est d'avoir à la fois le \A, qui est pour le début de la chaîne, et l'accent circonflexe ^, whumich que je pensais pour un point d'ancrage. N'utilisez pas à la fois redondant? Jim
voir perlretut:
\s
correspond à un caractère d'espacement, l'ensemble[\ \t\r\n\f]
et les autres. Le caractère spécial^
dans la première position d'une classe de caractères désigne un démenti de la classe de caractères, qui correspond à tout caractère mais ceux dans les crochets.Merci pour l'explication! Jim
OriginalL'auteur Eugene Yarmash