оператор if с условием поиска текста в кортеже - PullRequest
0 голосов
/ 01 февраля 2019

Мне нужно написать в erlang оператор if с условием поиска этого теста "tele / folin-house-s1 / SENSOR" в кортежах, которые я получаю.Ниже я вставляю получаемые кортежи:

{message,<<0,5,128,208,182,250,162,9,244,64,0,0,105,198,0,0>>,
     1,<<"DVES_0DBFDB">>,
     #{dup => false,retain => true},
     #{username => undefined},
     <<"tele/folin-house-s1/LWT">>,<<"Offline">>,
     {1549,8794,985040}}.
{message,<<0,5,128,208,182,250,162,9,244,64,0,0,105,198,0,0>>,
     1,<<"DVES_0DBFDB">>,
     #{dup => false,retain => true},
     #{username => undefined},
     <<"tele/folin-house-s1/LWT">>,<<"Offline">>,
     {1549,8794,985040}}.
{message,undefined,0,<<"733f0bfd-0741-4e55-bd14-ba10a156165f1549007325254">>,
     #{dup => false,retain => false},
     #{username => undefined},
     <<"tele/folin-house-s1/SENSOR">>,
     <<"{\"Time\":\"2018-12-18T22:37:00\",\"BME680\":{\"Temperature\":21.3,\"Humidity\":38.1,\"Pressure\":1021.4,\"Gas\":308.19},\"TempUnit\":\"C\"}">>,
     {1549,8796,895335}}.
{message,undefined,0,<<"733f0bfd-0741-4e55-bd14-ba10a156165f1549007325254">>,
     #{dup => false,retain => false},
     #{username => undefined},
     <<"tele/folin-house-s1/SENSOR">>,
     <<"{\"Time\":\"2018-12-18T22:37:00\",\"BME680\":{\"Temperature\":21.3,\"Humidity\":38.1,\"Pressure\":1021.4,\"Gas\":308.19},\"TempUnit\":\"C\"}">>,
     {1549,8803,302986}}.

Я бы отфильтровал с помощью оператора if только кортеж, подобный этому:

{message,undefined,0,<<"733f0bfd-0741-4e55-bd14-ba10a156165f1549007325254">>,
     #{dup => false,retain => false},
     #{username => undefined},
     <<"tele/folin-house-s1/SENSOR">>,
     <<"{\"Time\":\"2018-12-18T22:37:00\",\"BME680\":{\"Temperature\":21.3,\"Humidity\":38.1,\"Pressure\":1021.4,\"Gas\":308.19},\"TempUnit\":\"C\"}">>,
     {1549,8803,302986}}. 

, который содержит "tele / folin-дом-s1 / SENSOR».Я не знаю кодировку эрланга.

1 Ответ

0 голосов
/ 01 февраля 2019

Возможно, было бы лучше использовать case case

, в этом случае вам нужно передать полученный кортеж через функцию

, вот пример функции:

message({message,_, _,_, _, _, <<"tele/folin-house-s1/LWT">>,_, _}) ->
  do_something();
message(_Tuple) -> skip.

вот пример с оператором 'case':

message({message,_, _,_, _, _, Condition,_, _}) ->
  case Condition of
    <<"tele/folin-house-s1/LWT">> -> do_something();
    _Any -> skip
  end.

вот пример с оператором 'if':

message({message,_, _,_, _, _, Condition,_, _}) ->
  if
    Condition =:= <<"tele/folin-house-s1/LWT">> ->
      do_something();
    true ->
      skip
  end.
...