7
votes

Comment ajouter de la barre oblique si nécessaire avec GSUB

J'essaie d'ajouter une barre oblique si nécessaire:

a = '/var/www'
a.gsub
...


2 commentaires

Je ne pense pas avoir besoin d'avoir besoin d'une barre oblique de fin dans Ruby. Connaissez-vous sur le fichier.Join? ruby-doc.org/core/classes/file.html#m002545


Il est également utile d'apprendre à propos de la bibliothèque 'pathname' qui implémente une algèbre entière pour travailler avec des chemins de chemin.


8 Réponses :


0
votes

Le script suivant montre comment cela peut être effectué: xxx

it Sorties: xxx

et fonctionne en substituant le dernier caractère de La ligne (si ce n'est pas un / ) avec le même caractère plus un / aussi.


0 commentaires

2
votes

Pourquoi voulez-vous utiliser gsub em>?

  1. Vous ne faites pas de substitution (rien ne doit être retiré de la chaîne) li>
  2. si em> vous remplacez et que vous n'en avez besoin que dans un endroit, utilisez sous code> pas gsub code>. li>. LI>.
  3. si em> vous remplacez et que vous souhaitez modifier la chaîne, utilisez sous! code> ou gsub! Li>. Li>. ol>

    puisque vous ne faites pas de substitution, annoncez simplement la barre oblique si nécessaire: P>

    path << '/' if path[-1].chr != '/' # Make sure path ends with a slash
    


3 commentaires

Cela ne fonctionnera pas comme [-1] retournera le code de caractère, pas le personnage, vous voulez quelque chose de plus comme: un << '/' Si un [-1] .chr! = '/'


@darkliquid: ça marche dans Ruby 1.9. Mise à jour de ma réponse, merci.


Un autre itinéraire jusqu'à 1.8 Compatibilité est le chemin << '/' Sauf si le chemin [-1 ..- 1] == '/'.



0
votes

Il existe deux manières différentes qui ont déjà été couvertes, à travers une autre dans le mélange: xxx

ou xxx

Il convient de noter que ceux-ci convertissent tous les deux des cas de "//" à "/" n'importe où dans la chaîne, bien que si vous gagnez avec des chemins, il est peu probable de causer des problèmes.


0 commentaires

0
votes
"/var/www".gsub(/[^\/]$/, '\1/')  #=> "/var/www/"
"/var/www/".gsub(/[^\/]$/, '\1/') #=> "/var/www/"

1 commentaires

"exemple.com" .gsub (/ [^ \ \ /] $ /, '\ 1 /') # => "exemple.co/"



14
votes

Voici une version plus lisible

path << '/' unless path.end_with?('/')


0 commentaires

25
votes
a = File.join(a, "")
Swift, simple, and has the effect of guaranteeing that a ends in a path separator; that is, it gives the same result whether a is "/var/www" or "/var/www/".This is same as Joe White's comment above; I don't know why he didn't submit it as an answer, as it deserves to be one.Oddly, the Pathname library doesn't provide a convenient way of doing the same thing.

1 commentaires

Fonctionnellement génial, mais je ne pense pas pouvoir mettre cela dans mon code sans ajouter de commentaire.



0
votes

assez simple GSUB, qui est plus facile comme une doublure que la concaténation (<<) xxx

Ceci trouve simplement un caractère en option / à la fin de la chaîne et le représentant


0 commentaires

1
votes

Vous pouvez utiliser .chomp ('/') code> à la bande du / code> et ensuite .concat ('/') code> Pour ajouter une barre oblique à nouveau.

'/var/www/'.chomp('/').concat('/')   # => "/var/www/"
'/var/www'.chomp('/').concat('/')    # => "/var/www/"


0 commentaires