减去Elixir中的模式

时间:2016-12-08 19:12:08

标签: elixir

我试图在Elixir中减去一个模式。

我有2个文件名30_01_000.jpg30_00_000.jpg,其中30个是分钟,01& 00秒。我想要实现的是找到它们之间的区别,因为很明显,差异是1秒。但我可以将一个文件设为40_01_000.jpg,另一个文件可以为50_01_000.jpg。所以我想要一种动态的方法来做到这一点。

这背后的策略是:我为30_00_000.jpg请求了一个文件(通过Unix中的实际时间戳)但是可用的是30_01_000.jpg所以如果我找到差异我可以将它添加到Unix时间戳第一个文件,所以它将获得下一个文件。

那可能吗?以任何方式?任何帮助都会感激不尽

1 个答案:

答案 0 :(得分:1)

首先,您需要将字符串分解为组成部分:

iex(4)> <<minutes::binary-size(2),"_",seconds::binary-size(2),"_",milliseconds::binary-size(3),".jpg">> = <<"30_00_000.jpg">>

#=> minutes
#=> "30"
#=> seconds
#=> "00"
#=> milliseconds
#=> "000"

然后你想要将字符串转换为整数:

minutes = String.to_integer(minutes)

最后在正确的时间组件上进行减法:

difference = seconds_of_a - seconds_of_b
编辑:我有几分钟时间写出更完整的答案:

defmodule T do
  def subtract_seconds(<<minutes_a::binary-size(2),"_",seconds_a::binary-size(2),"_",milliseconds_a::binary-size(3),".jpg">>, <<minutes_b::binary-size(2),"_",seconds_b::binary-size(2),"_",milliseconds_b::binary-size(3),".jpg">>) do
    String.to_integer(seconds_a) - String.to_integer(seconds_b)
  end
end

# You would call this routine like this:
# T.subtract_seconds(<<"30_10_000.jpg">>,<<"30_04_000.jpg">>)
# => 6