2009-03-27 4 views
0

Ich baue ein kleines Skript, das ein Verzeichnis nach Dateien eines bestimmten Dateityps analysiert und den Speicherort (einschließlich des Dateinamens) in einem Array speichert. Dies sieht wie folgt aus:Schneiden Sie den Dateinamen und die Erweiterung einer gegebenen Zeichenfolge ab

def getFiles(directory) 
    arr = Dir[directory + '/**/*.plt'] 
    arr.each do |k| 
    puts "#{k}" 
    end 
end 

Der Ausgang ist der Weg und die Dateien. Aber ich will nur den Weg.

Statt /foo/bar.txt möchte ich nur die/foo/

Mein erster Gedanke war ein regulärer Ausdruck, aber ich bin nicht sicher, wie das zu tun.

Antwort

7

Könnte File.dirname von Nutzen sein?

File.dirname (file_name) → dir_name

Gibt alle Komponenten des Dateinamens in file_name mit Ausnahme der letzten eine gegeben. Der Dateiname muss unter Verwendung von Forward Slashes (``/'') unabhängig von das Trennzeichen für die lokale Datei System gebildet werden.

File.dirname("/home/gumby/work/ruby.rb") #=> "/home/gumby/work" 
0

Ich würde es durch die Schrägstriche in ein Array aufteilen, dann das letzte Element (den Dateinamen) entfernen, dann wieder in eine Zeichenfolge verbinden.

path = '/foo/bar.txt' 

path = path.split '/' 
path.pop 
path = path.join '/' 

# path is now '/foo' 
0

nicht sicher, welche Sprache Ihr in, aber hier ist die Regex für die letzte/bis zum Ende der Zeichenfolge.

/[^\/]*+$/ 

transliteriert auf alle Zeichen, die nicht ‚/‘ vor dem Ende der Zeichenfolge

4

Sie sind keine regex oder Split benötigen.

File.dirname("/foo/bar/baz.txt") 
# => "/foo/bar" 
0

Für einen regulären Ausdruck, sollte diese Arbeit, da * gierig:

.*/