Разобрать вывод команды и сохранить его в списке - PullRequest
0 голосов
/ 23 мая 2018

Я хочу проанализировать результат команды и сохранить его в списке:

Process Pid Mello       No  Status
122     523 GFAF_0      1   Running
125     512 GFAF_235    2   Running
128     987 GFAF_1      3   Stopped

Ожидаемый результат:

[GFAF_0,GFAF_235,GFAF_1]

Я хочу регулярное выражение на GFAF_XYZ (где XYZ - цифры), но я не могу найти способ сделать это.

С уважением, Дамиан

1 Ответ

0 голосов
/ 23 мая 2018

Я чувствую, что вы ищете что-то похожее на getopt

Вам необходимо указать параметры в соответствии с вашим форматом ввода

OptSpecList =
    [
     {host,    $h,        "host",    {string, "localhost"}, "Database server host"},
     {port,    $p,        "port",    integer,               "Database server port"},
     {dbname,  undefined, "dbname",  {string, "users"},     "Database name"},
     {xml,     $x,        undefined, undefined,             "Output data in XML"},
     {verbose, $v,        "verbose", integer,               "Verbosity level"},
     {file,    undefined, undefined, string,                "Output file"}
    ].

, а затем позвонить на getopt:parse/2:

getopt:parse(OptSpecList, ["-h", "myhost", "--port=1000", "-x", "file.txt", "-vvv", "dummy1", "dummy2"]).

Вы получите кортеж

{ok,{[{host,"myhost"},
      {port,1000},
      xml,
      {file,"file.txt"},
      {dbname,"users"},
      {verbose,3}],
     ["dummy1","dummy2"]}}

ИЛИ сверхпростое решение

, если вы получите данные в виде строки, например

"Process Pid Mello No Status 122 523 GFAF_0 1 Running 125 512 GFAF_235 2 Running 128 987 GFAF_1 3 Stopped"

Разделите по словам

L = string:tokens("Process Pid Mello No Status 122 523 GFAF_0 1 Running 125 512 GFAF_235 2 Running 128 987 GFAF_1 3 Stopped", " ").

["Process","Pid","Mello","No","Status","122","523","GFAF_0",
 "1","Running","125","512","GFAF_235","2","Running","128",
 "987","GFAF_1","3","Stopped"]

и проверьте, содержит ли элемент префикс "GFAF_"

F = fun(Elem, Acc) ->
    case string:find(Elem, "GFAF_", trailing) of
      nomatch -> Acc;
      _ -> [Elem|Acc]
    end end,
  lists:foldl(F, [], L).

Вы получите список

["GFAF_1","GFAF_235","GFAF_0"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...