Uzyskaj nazwę i rozszerzenie pliku w Rubim


123

Pracuję nad programem do pobierania wideo z YouTube, konwertowania go do formatu MP3 i tworzenia struktury katalogów dla plików.

Mój kod to:

FileUtils.cd("#{$musicdir}/#{$folder}") do
  YoutubeDlhelperLibs::Downloader.get($url)
  if File.exists?('*.mp4')
    puts 'Remove unneeded tempfile'
    Dir['*.mp4'].each do |waste|
      File.delete(waste)
    end
  else
    puts 'Temporary file already deleted'
  end

  Dir['*.m4a'].each do |rip|
    rip.to_s
    rip.split
    puts 'Inside the function'
    puts rip
  end

end

Pierwsza trafia do już utworzonego folderu muzycznego. Wewnątrz tego wykonuję get. Następnie mam w katalogu dwa pliki: „xyz.mp4” i „xyz.m4a”.

Chciałbym pobrać nazwę pliku bez rozszerzenia, aby móc obsługiwać oba pliki inaczej.

Używam tablicy, ale tablica tylko dla jednego dopasowania brzmi dla mnie szalenie.

Czy ktoś inny pomysł?


5
Nie używaj $globalstak, jak jesteś. Są bardzo mocną wskazówką, że nie rozumiesz zakresu zmiennych i polegasz na globalnych, aby „oszukiwać”. Mają zapach kodu i prowadzą do nieszczęścia i bólu.
Tin Man

Również rip.to_si rip.splitnic nie robić.
Tin Man

Odpowiedzi:


304

Możesz użyć następujących funkcji do swojego celu:

path = "/path/to/xyz.mp4"

File.basename(path)         # => "xyz.mp4"
File.extname(path)          # => ".mp4"
File.basename(path, ".mp4") # => "xyz"
File.basename(path, ".*")   # => "xyz"
File.dirname(path)          # => "/path/to"

15
Zauważ, że extnjest to ciąg ".mp4" lub nawet ciąg".*" .
Phrogz,

Dzięki. Problem w tym przypadku polega na tym, że nie znam nazwy pliku w tym miejscu. Po prostu wiem, że istnieją dwa pliki. Jeden .mp4 i jeden .m4a. Jak mogę uzyskać te nazwy plików?
Sascha Manns

@saigkill użyj ". *", symbolu wieloznacznego, jak powiedział Phrogz, jeśli nie wiesz / nie obchodzi cię, jakie jest rozszerzenie.
Travis Reeder

1
Do tej pory przynajmniej 60 razy chciałem pocałować osobę, która to napisała
bbozo
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.