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

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

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


Как разбить текст, чтобы сделать его строчки отдельными сообщениями[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

См.также

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