tutorial sirve rails que para documentacion descargar ruby

sirve - ruby tutorial



Cómo obtener un nombre de archivo sin extensión desde la ruta del archivo en Ruby (9)

En caso de que no se conozca la extensión (necesita el / separador):

irb(main):024:0> f = ''C:/foobar/blah.txt''.gsub("//","/") => "C:/foobar/blah.txt" irb(main):027:0> File.basename(f,File.extname(f)) => "blah"

¿Cómo puedo obtener el nombre de archivo de una ruta de archivo en Ruby?

Por ejemplo, si tengo una ruta de "C:/projects/blah.dll" y solo quiero el "blah".

¿Hay un método LastIndexOf en Ruby?


Intente File.basename

Devuelve el último componente del nombre de archivo dado en nombre_archivo, que debe formarse mediante barras diagonales (`` / '''') independientemente del separador usado en el sistema de archivos local. Si se da un sufijo y está presente al final de nombre_archivo, se elimina.

File.basename("/home/gumby/work/ruby.rb") #=> "ruby.rb" File.basename("/home/gumby/work/ruby.rb", ".rb") #=> "ruby"

En tu caso:

File.basename("C://projects//blah.dll", ".dll") #=> "blah"


La respuesta de Jonathon es mejor, pero para hacerte saber, somelist[-1] es una de las notaciones de LastIndexOf disponibles.

Como krusty.ar mencionó somelist.last apariencia aparentemente también lo es.

irb(main):003:0* f = ''C://path//file.txt'' irb(main):007:0> f.split(''//') => ["C:", "path", "file.txt"] irb(main):008:0> f.split(''//')[-1] => "file.txt"


Prueba este codigo

Usar extname

File.basename("a/b/d/test.rb", File.extname("a/b/d/test.rb")) #=> "test"


Puede obtener la ruta del directorio al script actual con:

File.dirname __FILE__


Si tiene acceso a las variables ENV, el scan combinado con esta pequeña expresión regular (que encuentra la última palabra pero una, un punto, luego la última palabra de la cadena) colocará el nombre del archivo en ''nombre de archivo'':

filename = ENV[''SCRIPT_NAME''].scan(//w+/./w+$/)

Obviamente, puedes usar scan y la expresión regular en cualquier nombre de ruta que incluya el nombre del archivo, y __FILE__ es la opción obvia:

__FILE__.scan(//w+/./w+$/)


Tenga en cuenta que las cadenas de comillas dobles se escapan.

''C:/projects/blah.dll''.split(''//').last


Jonathan Lonowski respondió perfectamente, pero hay algo que ninguna de las respuestas se menciona aquí. En lugar de File::extname , puede usar directamente un ''.*'' Para obtener el nombre del archivo.

File.basename("C://projects//blah.dll", ".*") # => "C://projects//blah"

Pero, si desea obtener el nombre de archivo base de algún archivo de extensión específico , entonces necesita usar File::extname , de lo contrario no.


require ''pathname'' Pathname.new(''/opt/local/bin/ruby'').basename # => #<Pathname:ruby>

No he sido usuario de Windows en mucho tiempo, pero rdoc de Pathname dice que no tiene problemas con los separadores de nombre de directorio en Windows.