преобразовать номер строки с байтами в целое число в рельсах ("32MB" -> 32.megabytes) - PullRequest
0 голосов
/ 20 февраля 2020

Я хотел бы преобразовать строку, включающую в себя КБ, МБ, ГБ как часть строки, в целочисленный эквивалент.

Примеры

"24kb" = 24.kilobytes = 24576
"32MB" = 32.megabytes = 33554432
"64 GB" = 64.gigabytes = 68719476736

Я могу go другой Кстати, целое число в строку, используя ...

>> ActiveSupport::NumberHelper.number_to_human_size(68719476736)
=> "64 GB"

Я пытался ...

>> Integer("64GB")
=> ArgumentError: invalid value for Integer(): "64GB"

Я могу создать свой собственный метод, делая что-то вроде ...

  def convert_size_to_integer(size)
    size.downcase!
    if(size.end_with? 'kb')
      size.to_i.kilobytes
    elsif(size.end_with? 'mb')
      size.to_i.megabytes
    elsif(size.end_with? 'gb')
      size.to_i.gigabytes
    else
      size.to_i
    end
  end

но это неудовлетворительно и, похоже, что-то уже есть для этого. И, конечно, я мог бы упростить это и сделать его более надежным с помощью регулярных выражений. Но я стараюсь вообще не писать это, находя что-то, что уже существует.

Есть предложения?

1 Ответ

1 голос
/ 20 февраля 2020

Есть Размер файла

Довольно просто написать свой собственный: Но вы можете написать свой собственный:

def convert_size_to_bytes
  md = match(/^(?<num>\d+)\s?(?<unit>\w+)?$/)
  md[:num].to_i * 
      case md[:unit]
      when 'KB'
        1024
      when 'MB'
        1024**2
      when 'GB'
        1024**3
      when 'TB'
        1024**4
      when 'PB'
        1024**5
      when 'EB'
        1024**6
      when 'ZB'
        1024**7
      when 'YB'
        1024**8
      else
        1
      end
    end
...