|
Поиск команды в массиве данных |
|
|
|
Dec 3 2015, 19:32
|
Участник

Группа: Участник
Сообщений: 20
Регистрация: 28-02-08
Пользователь №: 35 466

|
Такая задача. Контроллер принимает по UART некоторые данные в виде строк разной длины и содержания. Т.е. обычные текстовые строки. В этих строках может содержаться команда для контроллера, например: Switсh on out 7, input 1 disable, Led 11 on. Строки хранятся до разбора в массиве. Размер массива ограничен, а частота поступления новых строк не нормируется. Поэтому нужно быстро разобрать строку, вычленить из нее ключевые слова и передать соответствующие команды основной программе. Задача усложняется тем, что таких слов будет около 100, кроме того, в будущем их кол-во предполагается увеличить. Как реализуется обычно такая задача? Ничего умнее, как последовательный поиск каждого слова в строке придумать не могу. Но это очень долго получается. Например, сначала придется пролистать весь массив в поисках "Led", потом опять весь массив в поисках "input" и т.д. А хочется читать строку 1 раз, по пути находя все ключевые слова.
|
|
|
|
|
 |
Ответов
|
Dec 4 2015, 09:30
|
Участник

Группа: Участник
Сообщений: 20
Регистрация: 28-02-08
Пользователь №: 35 466

|
Ввод может быть как человеком, так и внешним устр-вом. Как пример я привел GSM-модуль: можно ручками через терминал писать ему команды, а можно выстреливать их из контроллера. При этом последовательность команд будет разной, кол-во в общем-то тоже (0xOD выступает в качестве разделителя и флага одновременно). C CRC32 интересно, тоже думал в этом направлении. Наверно, это наиболее быстрый вариант (считать CRC32 для первого слова, искать в массиве команд. Потом CRC второго слова - искать в массиве, и так, пока не наткнулся на подходящее. Разобрал команду - пошел дальше).
|
|
|
|
|
Dec 4 2015, 09:37
|

отэц
    
Группа: Свой
Сообщений: 1 729
Регистрация: 18-09-05
Из: Москва
Пользователь №: 8 684

|
Может упростить задачу? Писать примерно так : "~ включить_канал:1;" где "~" - стартовый байт "включить_канал" - команда ":" признак что потом идёт число ";" признак конца пачки команду собирать побайтно в массив и сравнивать через strcmp . IO("~ включить_канал:1;",19);
Прикрепленные файлы
io.txt ( 7.5 килобайт )
Кол-во скачиваний: 21
--------------------
b4edbc0f854dda469460aa1aa a5ba2bd36cbe9d4bc8f92179f 8f3fec5d9da7f0 SHA-256
|
|
|
|
Сообщений в этой теме
interrupt Поиск команды в массиве данных Dec 3 2015, 19:32 Александр77 Если есть возможность повлиять на формирование сам... Dec 3 2015, 19:50 interrupt Да в общем-то все данные получаются значимыми. Про... Dec 3 2015, 20:10 CrimsonPig Цитата(interrupt @ Dec 3 2015, 20:10) Да ... Dec 3 2015, 20:55 interrupt Цитата(CrimsonPig @ Dec 3 2015, 23:55) Ну... Dec 3 2015, 21:11 gerber Можно составить статический связный список соответ... Dec 3 2015, 22:19 jcxz Цитата(interrupt @ Dec 4 2015, 01:32) Так... Dec 4 2015, 03:34 Dog Pawlowa Я бы задумался над постановкой задачи, ибо в ней п... Dec 4 2015, 07:00 jcxz Цитата(Dog Pawlowa @ Dec 4 2015, 13:00) Я... Dec 4 2015, 07:53 psL вот проект. решает аналогичную задачу. может приго... Dec 4 2015, 09:18 interrupt Цитата(psL @ Dec 4 2015, 12:18) вот проек... Dec 4 2015, 09:54 XVR Вам подойдет поиск по Регулярным Выражениям. Из вс... Dec 4 2015, 10:24 CrimsonPig Цитата(XVR @ Dec 4 2015, 10:24) Вам подой... Dec 4 2015, 10:27  XVR Цитата(CrimsonPig @ Dec 4 2015, 13:27) а ... Dec 4 2015, 10:45   CrimsonPig Цитата(XVR @ Dec 4 2015, 10:45) Видимо ну... Dec 4 2015, 10:52 interrupt Цитата(Lmx2315 @ Dec 4 2015, 12:37) Может... Dec 4 2015, 10:25 MrYuran AT команды Dec 4 2015, 10:26 Tarbal Цитата(MrYuran @ Dec 4 2015, 13:26) AT ко... Dec 4 2015, 12:30 interrupt За советы спасибо.
По поводу скорости. Обмен идет... Dec 4 2015, 11:56 XVR Цитата(interrupt @ Dec 4 2015, 14:56) Как... Dec 4 2015, 12:39  interrupt Цитата(XVR @ Dec 4 2015, 15:39) Trie дере... Dec 4 2015, 13:17   Harvester Цитата(interrupt @ Dec 4 2015, 16:17) Пох... Dec 19 2015, 11:26 ДЕЙЛ Цитата(interrupt @ Dec 3 2015, 23:32) Так... Dec 18 2015, 22:18 SlavaV привет,
особо не вдавался в советы форумчан (проч... Dec 19 2015, 13:22
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|