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

Материал из Онлайн справочника
Перейти к: навигация, поиск

Перевод: Максим Кузьмин (Cubewriter)
Перевел 40452 статей для сайта.

Контакты:

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


Pixel Art Mini Meow Animated.gif Черновик


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

Проблема

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

Решение

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

Пример

Nodered recipe split-text.png
[{"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

См.также

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

  1. cookbook.nodered.org - Split text into one message per line