我试图在Elixir中减去一个模式。
我有2个文件名30_01_000.jpg
和30_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时间戳第一个文件,所以它将获得下一个文件。
那可能吗?以任何方式?任何帮助都会感激不尽
答案 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