Comment puis-je supprimer attaque et de fuite des espaces à partir des éléments d'un tableau?
J'ai un tableau qui contient la chaîne de caractères qui peut contenir des espaces ajouté à la fin. J'ai besoin de supprimer ces espaces à l'aide de script perl. mon tableau ressemble à ceci
@array = ("shayam "," Ram "," 24.0 ");
J'ai besoin de la sortie comme
@array = ("shayam","Ram","24.0");
J'ai essayé avec chomp (@array)
. Il ne fonctionne pas avec les cordes.
Dupliquer : stackoverflow.com/questions/184590/..., stackoverflow.com/questions/2025658/...
Dans le tableau donné, tous les index contenant une seule chaîne ou plusieurs chaînes de caractères aime trop @tableau = ("shayam de nice "," Ram "," 24.0 "); ?
ceux-là ne sont pas des doublons exacts de cette. C'est à propos de faire pour une liste de valeurs.
Pas de doublons exacts, mais les besoins tournent autour de
Dans le tableau donné, tous les index contenant une seule chaîne ou plusieurs chaînes de caractères aime trop @tableau = ("shayam de nice "," Ram "," 24.0 "); ?
ceux-là ne sont pas des doublons exacts de cette. C'est à propos de faire pour une liste de valeurs.
Pas de doublons exacts, mais les besoins tournent autour de
s#^\s+|\s+$##g
ou s#\s+$##
dans une forme ou une autre.
OriginalL'auteur Raj | 2010-07-07
Vous devez vous connecter pour publier un commentaire.
La fonction clé ici est de grep(), tout le reste est juste la démo de la sauce.
map
être plus approprié?(réponse à Alan Horn) de l'OMI 'grep' suggère la recherche de quelque chose dans une liste, "la carte", suggère que l'ensemble de la liste sera utilisé, par conséquent, l'utilisation de 'grep' où a 'map' est plus approprié rend le code moins immédiatement lisible
je sais que les deux grep et carte très bien, mais je suis en train de parler de ce qu'ils impliquent pour moi au premier coup d'œil, et la prise en compte de ces facteurs rend le code plus lisible, et donc facile à entretenir par les autres. la définition de grep confirme: "les éléments pour lesquels l'expression évaluée à true" - dans ce cas, tous les éléments sont retournés, alors c'est inutile de la confusion - si je vois un grep je commence à regarder pour savoir exactement ce qui sera compensée par le grep condition, mais si je vois une carte, je sais que tout sera utilisé à partir de la liste d'entrée
et cela dépend évidemment de l'expérience personnelle qui est le plus commun, mais j'ai vu et utilisé la carte plus de grep dans+ de 10 ans de Perl
Votre regexp seulement des bandes de l'espace, à la fin, pas au début.
OriginalL'auteur Alan Horn
La question sous-jacente s'articule autour de retrait d'attaque et de fuite des espaces de cordes, et a été répondu dans plusieurs threads dans une certaine forme ou d'une autre à la suite de la regex de substitution (ou son équivalent):
chomp
ing la matrice de ne supprimer que de fuite d'entrée séparateurs d'enregistrements ("\n"
par défaut). Il n'est pas conçu pour enlever la fuite des espaces.De
perldoc -f chomp
:L'utilisation de la
{}
comme délimiteur est proche de snob 🙂 Mais pour être honnête, je ne savais pas qu'il avait accepté de faire.. cette réponse incomplète..pourriez-vous ou de quelqu'un, s'il vous plaît, dites-moi où cette syntaxe avec un "bloc" (ou ce qu'il en est) avant le
foreach
mot-clé est documenté. Le perlsyn page ne mentionne pas cette syntaxe, mais il fonctionne.OriginalL'auteur Zaid
Comment sur:
@array = map {join(' ', split(' '))} @array;
OriginalL'auteur lkench
La plus haute cote de réponse ici avait l'air bien mais est, à mon humble avis, pas aussi facile à lire que ça pouvait être. J'ai ajouté une chaîne de caractères avec des espaces internes pour montrer à ceux qui ne sont pas supprimés.
La sortie:
OriginalL'auteur Eric Van Bezooijen
Après cela, @res contiendra les éléments souhaités.
Vous dire parce que vous pouvez le lire? Je pensais que Perl a été tout au sujet de la liberté de choix.
Ridicule. C'est juste une ligne avec
map
ouforeach
(que Zaid montre), et donc plus lisible.my $el; foreach $el …
est le style d'un unversed débutant, tout le monde écritforeach my $el …
. Aussi, le bicarbonate. Désolé, je ne pense pas que votre réponse est bonne et mérite son manque de upvotes.Il est unidiomatic parce que vous êtes la capture inutilement et de la création d'un nouveau tableau individuellement pousser des éléments plutôt que de modifier les éléments du tableau d'origine en place, comme l'OP de la question des états. Si un nouveau tableau va être créé, utilisez
map
, si des éléments de la matrice sera modifié en place, l'utilisationfor
.OriginalL'auteur Borealid
Je pense que Borealid de l'exemple doit être:
Évitez d'utiliser des
\1
sur le membre de droite de la substitution. De Plus, il n'est pas nécessaire de capturer ici. Voir perlfaq: perldoc.perl.org/... et perlre: perldoc.perl.org/perlre.html#Warning-on-%5c1-Instead-of-%241OriginalL'auteur bohica