Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将Erlang sys.config转换为Elixir config.exs?_Erlang_Elixir - Fatal编程技术网

如何将Erlang sys.config转换为Elixir config.exs?

如何将Erlang sys.config转换为Elixir config.exs?,erlang,elixir,Erlang,Elixir,这可能很简单。 例如,将sys.config转换为mix config.exs: {gsms, [{interfaces, [ {gsms_0705, 1, [{device,"/dev/tty.usbserial-FTF5DP2J"}, {bnumber, "<phone-number>"},{baud,19200}, {reopen_timeout, 5000}]} {gsms_0705, 2, [{device,"/d

这可能很简单。 例如,将sys.config转换为mix config.exs:

{gsms, [{interfaces,
  [
   {gsms_0705, 1, [{device,"/dev/tty.usbserial-FTF5DP2J"},
           {bnumber, "<phone-number>"},{baud,19200},
           {reopen_timeout, 5000}]}
   {gsms_0705, 2, [{device,"/dev/tty.HUAWEIMobile-Pcui"},
           {bnumber, "<phone-number>"},
           {reopen_timeout, 5000}]}
   {gsms_0705, 3, [{device, "/dev/tty.usbserial"},
          {bnumber, "<phone-number>"},
          {baud, 9600}]}
  ]}
]}
{gsms,[{接口,
[
{gsms_0705,1,[{device,“/dev/tty.usbserial-FTF5DP2J”},
{b编号,“},{baud,19200},
{重新打开\u超时,5000}]}
{gsms_0705,2,[{device,“/dev/tty.HUAWEIMobile Pcui”},
{b编号,“},
{重新打开\u超时,5000}]}
{gsms_0705,3,[{device,“/dev/tty.usbserial”},
{b编号,“},
{baud,9600}]}
]}
]}

我想应该是这样的:

config :gsms, :interfaces, [
  {:gsms_0705, 1, [device: '/dev/tty.usbserial-FTF5DP2J',
                   bnumber: '<phone-number>',
                   baud: 19200,
                   reopen_timeout: 5000]},
  # and so on
]
config:gsms,:接口[
{:gsms_0705,1,[设备:'/dev/tty.usbserial-FTF5DP2J',
b编号:'',
波特:19200年,
重新打开\u超时:5000]},
#等等
]

其中,
:gsms
是您正在配置的应用程序,
:interfaces
是您将通过
应用程序检索的键。get_env/2
应用程序。get_env(:gsms,:interfaces)
)和
{:gsms*,}……
元组列表是该键处的值。

如果修复语法错误(缺少逗号)并添加强制尾随点,您甚至可以从Elixir解析Erlang术语,并让解析器为您进行转换:

erlang_term = '{gsms, [{interfaces, [
  {gsms_0705, 1, [{device,"/dev/tty.usbserial-FTF5DP2J"},
                  {bnumber, "<phone-number>"},{baud,19200},
                  {reopen_timeout, 5000}]},
  {gsms_0705, 2, [{device,"/dev/tty.HUAWEIMobile-Pcui"},
                  {bnumber, "<phone-number>"},
                  {reopen_timeout, 5000}]},
  {gsms_0705, 3, [{device, "/dev/tty.usbserial"},
                  {bnumber, "<phone-number>"},
                  {baud, 9600}]}
 ]}
]}.'

{:ok, tokens, _} = :erl_scan.string(erlang_term)
{:ok, result} = :erl_parse.parse_term(tokens)
IO.inspect result, limit: :infinity
{:gsms,
 [interfaces: [{:gsms_0705, 1,
    [device: '/dev/tty.usbserial-FTF5DP2J', bnumber: '<phone-number>',
     baud: 19200, reopen_timeout: 5000]},
   {:gsms_0705, 2,
    [device: '/dev/tty.HUAWEIMobile-Pcui', bnumber: '<phone-number>',
     reopen_timeout: 5000]},
   {:gsms_0705, 3,
    [device: '/dev/tty.usbserial', bnumber: '<phone-number>', baud: 9600]}]]}
config :gsms, interfaces: [
  {:gsms_0705, 1, [
    device: '/dev/tty.usbserial-FTF5DP2J',
    bnumber: '<phone-number>',
    baud: 19200,
    reopen_timeout: 5000]},
  {:gsms_0705, 2, [
    device: '/dev/tty.HUAWEIMobile-Pcui',
    bnumber: '<phone-number>',
    reopen_timeout: 5000]},
  {:gsms_0705, 3, [
    device: '/dev/tty.usbserial',
    bnumber: '<phone-number>',
    baud: 9600]}]