Node-RED:Рецепты/Как разбить текст, чтобы сделать его строчки отдельными сообщениями: различия между версиями

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Нет описания правки
Строка 1: Строка 1:
{{Node-RED/Панель перехода}}
{{Node-RED/Панель перехода}}
{{Перевод от Сubewriter}}
{{Перевод от Сubewriter}}
{{Myagkij-редактор}}
{{Myagkij-редактор}}
{{Черновик}}


=Как разбить текст, чтобы сделать его строчки отдельными сообщениями<ref>[https://cookbook.nodered.org/basic/split-text cookbook.nodered.org - Split text into one message per line]</ref>=
=Как разбить текст, чтобы сделать его строчки отдельными сообщениями<ref>[https://cookbook.nodered.org/basic/split-text cookbook.nodered.org - Split text into one message per line]</ref>=
Строка 51: Строка 48:


=См.также=
=См.также=
 
{{ads}}
=Внешние ссылки=
=Внешние ссылки=



Версия от 10:10, 7 августа 2022

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Как разбить текст, чтобы сделать его строчки отдельными сообщениями[1]

Проблема

Вам нужно выполнить какое-то действие с каждой строчкой из блока текста. К примеру, вы хотите добавить в начале каждой строчки ее номер.

Решение

Для этого можно воспользоваться нодой «Split». После нее могут идти ноды, необходимые для работы с отдельными строчками текста, а далее должна идти нода «Join», чтобы снова объединить эти строчки в блок текста.

Пример

[{"id":"df6514f0.029748","type":"inject","z":"64133d39.bb0394","name":"inject","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":"","x":110,"y":900,"wires":[["11f53f61.2f7be1"]]},{"id":"11f53f61.2f7be1","type":"template","z":"64133d39.bb0394","name":"","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"one\ntwo\nthree\nfour\nfive","x":240,"y":900,"wires":[["760c1d71.c29744"]]},{"id":"760c1d71.c29744","type":"split","z":"64133d39.bb0394","name":"","splt":"\\n","x":190,"y":960,"wires":[["3e427aac.9b9596"]]},{"id":"3e427aac.9b9596","type":"change","z":"64133d39.bb0394","name":"Prepend line number","rules":[{"t":"set","p":"payload","pt":"msg","to":"(parts.index+1) & \": \" & payload","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":360,"y":960,"wires":[["d44d4767.945fd8"]]},{"id":"d44d4767.945fd8","type":"join","z":"64133d39.bb0394","name":"","mode":"auto","build":"string","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","timeout":"","count":"","x":530,"y":960,"wires":[["bfe3e43b.85fa88"]]},{"id":"bfe3e43b.85fa88","type":"debug","z":"64133d39.bb0394","name":"debug","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","x":650,"y":960,"wires":[]}]

Разбор

В примере выше ноды «Inject» и «Template» используются, чтобы «впрыснуть» в поток блок текста, состоящий из нескольких строчек.

one
two
three
four
five

По умолчанию нода «Split» работает таким образом, что когда ей «скармливается» текст, она разбивает его строчки на отдельные сообщения.

Далее нода «Change» модифицирует свойство «payload» каждого сообщения при помощи JSONata-выражения «(parts.index+1) & ": " & payload», в котором используется свойство «msg.parts.index», чтобы узнать номер строчки, а затем поставить его перед значением свойства «msg.payload».

Наконец, нода «Join» заново объединяет эти сообщения в один блок текста:

1: one
2: two
3: three
4: four
5: five

См.также

Внешние ссылки