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

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
 
Нет описания правки
 
(не показаны 2 промежуточные версии 1 участника)
Строка 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>=
Строка 20: Строка 17:
[[File:nodered_recipe_split-text.png|center]]
[[File:nodered_recipe_split-text.png|center]]


<syntaxhighlight lang="javascript" enclose="div">
<syntaxhighlight lang="javascript">
[{"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":[]}]
[{"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":[]}]
</syntaxhighlight>
</syntaxhighlight>
Строка 28: Строка 25:
В примере выше ноды '''«Inject»''' и '''«Template»''' используются, чтобы ''«впрыснуть»'' в поток блок текста, состоящий из нескольких строчек.
В примере выше ноды '''«Inject»''' и '''«Template»''' используются, чтобы ''«впрыснуть»'' в поток блок текста, состоящий из нескольких строчек.


<syntaxhighlight lang="javascript" enclose="div">
<syntaxhighlight lang="javascript">
one
one
two
two
Строка 42: Строка 39:
Наконец, нода '''«Join»''' заново объединяет эти сообщения в один блок текста:
Наконец, нода '''«Join»''' заново объединяет эти сообщения в один блок текста:


<syntaxhighlight lang="javascript" enclose="div">
<syntaxhighlight lang="javascript">
1: one
1: one
2: two
2: two
Строка 51: Строка 48:


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


Строка 57: Строка 54:
[[Категория:Рецепты Node-RED]]
[[Категория:Рецепты Node-RED]]
[[Категория:Рецепты]]
[[Категория:Рецепты]]
{{Навигационная таблица/Node-RED библиотеки}}
{{Навигационная таблица/Телепорт}}

Текущая версия от 18:25, 14 мая 2023

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


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

См.также

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