Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Построковое сравнение строк с эталоном - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Построковое сравнение строк с эталоном
Eapold Дата: Четверг, 22.11.2012, 11:30 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Gustav, Простите, необратил на это внимание. Исправил.
Есть интересная задача, но я что то никак не могу сообразить , знания по VB на три по семибальной системе. Помогите пожалуйста разобратся может
по модульно или как получится.

Суть задачи:
Имеется 4 листа:

Эталон - Здесь 4 эталона - правильноой последовательности строк (по 7 строк в каждом подэталоне), у каждого подтолона есть главная строка она всегда седьмая снизу (время событий идет снизу вверх, (если этой строки не найдено в листе Данные остальные 6 строк неимеет смысла искать), подэталоны разделены пробелом, в подэталоне может встретится знак ? или * который может указывать на любое значение.
Необходимо искать правльную последовательность строк (учитывая * и ? - что не является ошибкой. Например Вентилятор №1, или Вентилятор №2 - это не ошибка) в листе Данные. На листе Эталон хранится только часть искомого текста.

Данные - данные для обработки. (здесь точно есть правильная последовательность строк, а есть неправильная) при нахождении правильной последовательности закрасить справа ячейку в зеленый цвет на листе Анализ, (таких последовательностей правильных может много нам нужна 1 любая) и скопировать данные уже полностью строчку в Итог (здесь будет формироватся новый журнал работы оборудования без пробелов, а в конце работы его надо отсортировать по дате (снизу вверх (время идет снизу вверх у сообщений)), если все проверили весь лист Данные а искомое не найдено, то в листе

Анализ справа закрасить в красный цвет (в красный цвет необходимо красить если не найдена главной строки (главная строка 7 снизу). Если найдена главная строка, то в анализе красная ячейка и копирование всех 7 строк в Итог, если главной строки не найдено копировать в Итог нет необходимости. На листе Данные сообщения хранятся в полном виде (со временем)
Анализ - анализ правильности работы оборудования. подсвечиваются ячеки по результату работы сравнения данных с эталоном

Итог - формирование только интересующих строк. На листе Итог сообщения копируются по условию в полном виде (со временем) из таблицы Данные

Написал много но что бы понять что я хотел описать объясню механику:

Есть событие, в нашем случае главная строка, после которого оборудование должно отработать именно по алгоритму тоесть правильно, нужно просто реальныый события сравнить с эталоном и при нахождении правильной последовательности в таблице Анализ справа от этого события (различаются по т.1 или т.2 и.т.д.) залить в зеленый цвет и скопировать в Итог. если нашлось несколько таких правильных эталонов то скопировать только один в Итог, если главной строки не найдена, то залить в Анализ красным цветом и ничего не копировать в Итог, если главная строка найдена, а последовательность не как в эталоне, то залить красным цветом и скопировать что нашли в Итог. Итог в конце работы отартировать по времени (снизу вверх).
К сообщению приложен файл: 1825178.7z (95.8 Kb)
 
Ответить
СообщениеGustav, Простите, необратил на это внимание. Исправил.
Есть интересная задача, но я что то никак не могу сообразить , знания по VB на три по семибальной системе. Помогите пожалуйста разобратся может
по модульно или как получится.

Суть задачи:
Имеется 4 листа:

Эталон - Здесь 4 эталона - правильноой последовательности строк (по 7 строк в каждом подэталоне), у каждого подтолона есть главная строка она всегда седьмая снизу (время событий идет снизу вверх, (если этой строки не найдено в листе Данные остальные 6 строк неимеет смысла искать), подэталоны разделены пробелом, в подэталоне может встретится знак ? или * который может указывать на любое значение.
Необходимо искать правльную последовательность строк (учитывая * и ? - что не является ошибкой. Например Вентилятор №1, или Вентилятор №2 - это не ошибка) в листе Данные. На листе Эталон хранится только часть искомого текста.

Данные - данные для обработки. (здесь точно есть правильная последовательность строк, а есть неправильная) при нахождении правильной последовательности закрасить справа ячейку в зеленый цвет на листе Анализ, (таких последовательностей правильных может много нам нужна 1 любая) и скопировать данные уже полностью строчку в Итог (здесь будет формироватся новый журнал работы оборудования без пробелов, а в конце работы его надо отсортировать по дате (снизу вверх (время идет снизу вверх у сообщений)), если все проверили весь лист Данные а искомое не найдено, то в листе

Анализ справа закрасить в красный цвет (в красный цвет необходимо красить если не найдена главной строки (главная строка 7 снизу). Если найдена главная строка, то в анализе красная ячейка и копирование всех 7 строк в Итог, если главной строки не найдено копировать в Итог нет необходимости. На листе Данные сообщения хранятся в полном виде (со временем)
Анализ - анализ правильности работы оборудования. подсвечиваются ячеки по результату работы сравнения данных с эталоном

Итог - формирование только интересующих строк. На листе Итог сообщения копируются по условию в полном виде (со временем) из таблицы Данные

Написал много но что бы понять что я хотел описать объясню механику:

Есть событие, в нашем случае главная строка, после которого оборудование должно отработать именно по алгоритму тоесть правильно, нужно просто реальныый события сравнить с эталоном и при нахождении правильной последовательности в таблице Анализ справа от этого события (различаются по т.1 или т.2 и.т.д.) залить в зеленый цвет и скопировать в Итог. если нашлось несколько таких правильных эталонов то скопировать только один в Итог, если главной строки не найдена, то залить в Анализ красным цветом и ничего не копировать в Итог, если главная строка найдена, а последовательность не как в эталоне, то залить красным цветом и скопировать что нашли в Итог. Итог в конце работы отартировать по времени (снизу вверх).

Автор - Eapold
Дата добавления - 22.11.2012 в 11:30
Gustav Дата: Четверг, 22.11.2012, 11:48 | Сообщение № 2
Группа: Админы
Ранг: Участник клуба
Сообщений: 2797
Репутация: 1161 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Похоже, что задача действительно любопытная, правда, описание воспринимается с огромным трудом. Повставляли бы пустые строки между абзацами, уже бы полегче было читать... (Или кто-нибудь из модераторов бы вставил, спасибо!)


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеПохоже, что задача действительно любопытная, правда, описание воспринимается с огромным трудом. Повставляли бы пустые строки между абзацами, уже бы полегче было читать... (Или кто-нибудь из модераторов бы вставил, спасибо!)

Автор - Gustav
Дата добавления - 22.11.2012 в 11:48
Бриан Дата: Четверг, 22.11.2012, 12:24 | Сообщение № 3
Группа: Гости
Я в этом описании абсолютно ничего не понял. Какая-то каша! То Вы пишете, что у Вас в файле встречаются ? И * потом приводите сюда пример - вентилятор 1 и вентилятор 2 - в которых этих знаков и близко нет. И все в таком же духе!
 
Ответить
СообщениеЯ в этом описании абсолютно ничего не понял. Какая-то каша! То Вы пишете, что у Вас в файле встречаются ? И * потом приводите сюда пример - вентилятор 1 и вентилятор 2 - в которых этих знаков и близко нет. И все в таком же духе!

Автор - Бриан
Дата добавления - 22.11.2012 в 12:24
Gustav Дата: Четверг, 22.11.2012, 12:40 | Сообщение № 4
Группа: Админы
Ранг: Участник клуба
Сообщений: 2797
Репутация: 1161 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Начал бы я с того, что на листе Данные по Ctrl+H заменил бы два символа "; " на один символ ";", после чего разбил текст по столбцам. У меня получилось 4 столбца, которые я назвал: "ДатаВремя1", "Контроллер", "Событие", "ДатаВремя2".

Вопрос: что такое "ДатаВремя2" (или тайм-штамп в конце общей строки Данных до разбора) ? Время завершения общей реакции на событие ("загазованность") ?

Пример: строки с 8365 по 8220 имеют общее окончание "26.10.2012 18:35:43". Можно ли говорить о том, что это время объединяет их в некий единый массив, в пределах которого и надо искать правильную последовательность событий?


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал Gustav - Четверг, 22.11.2012, 12:43
 
Ответить
СообщениеНачал бы я с того, что на листе Данные по Ctrl+H заменил бы два символа "; " на один символ ";", после чего разбил текст по столбцам. У меня получилось 4 столбца, которые я назвал: "ДатаВремя1", "Контроллер", "Событие", "ДатаВремя2".

Вопрос: что такое "ДатаВремя2" (или тайм-штамп в конце общей строки Данных до разбора) ? Время завершения общей реакции на событие ("загазованность") ?

Пример: строки с 8365 по 8220 имеют общее окончание "26.10.2012 18:35:43". Можно ли говорить о том, что это время объединяет их в некий единый массив, в пределах которого и надо искать правильную последовательность событий?

Автор - Gustav
Дата добавления - 22.11.2012 в 12:40
Eapold Дата: Четверг, 22.11.2012, 12:41 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Бриан.
На листе Данные есть такие строки "28.10.2012 13:28:15; Контроллер Modbus Tcp; ВЫТЯЖНАЯ ВЕНТИЛЯЦИЯ. ВЫТЯЖНОЙ ВЕНТИЛЯТОР №1. МАГНИТНЫЙ ПУСКАТЕЛЬ ОТКЛЮЧИЛСЯ. ИСП РЕЖ.; 28.10.2012 13:41:50" - но может быть вентилятор №1 или №2 это без разница.

? и * я предложил для того что бы, если при сравнении строк будет найден Вентилятор №1 или 2 то это не имело бы значения, главное что бы включился любой вентилятор.

Простите за сумбурный текст , я его долго писал....но видимо что плохо описал.
 
Ответить
СообщениеБриан.
На листе Данные есть такие строки "28.10.2012 13:28:15; Контроллер Modbus Tcp; ВЫТЯЖНАЯ ВЕНТИЛЯЦИЯ. ВЫТЯЖНОЙ ВЕНТИЛЯТОР №1. МАГНИТНЫЙ ПУСКАТЕЛЬ ОТКЛЮЧИЛСЯ. ИСП РЕЖ.; 28.10.2012 13:41:50" - но может быть вентилятор №1 или №2 это без разница.

? и * я предложил для того что бы, если при сравнении строк будет найден Вентилятор №1 или 2 то это не имело бы значения, главное что бы включился любой вентилятор.

Простите за сумбурный текст , я его долго писал....но видимо что плохо описал.

Автор - Eapold
Дата добавления - 22.11.2012 в 12:41
Eapold Дата: Четверг, 22.11.2012, 12:46 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Gustav, время перед сообщение это время когда событие произощло, время после события - это время квитирования (время когда его заметили, нажали кнопку "Видел, можножно закрыть).
Система держит неквитированными все события пока оператор не отреагирует на них (если это необходимо) и нажмет кнопку "Кватировать события"

Пример: строки с 8365 по 8220 имеют общее окончание "26.10.2012 18:35:43". - эти события сквитированы вместе, здесь нет никакой последовательности.


Сообщение отредактировал Eapold - Четверг, 22.11.2012, 12:48
 
Ответить
СообщениеGustav, время перед сообщение это время когда событие произощло, время после события - это время квитирования (время когда его заметили, нажали кнопку "Видел, можножно закрыть).
Система держит неквитированными все события пока оператор не отреагирует на них (если это необходимо) и нажмет кнопку "Кватировать события"

Пример: строки с 8365 по 8220 имеют общее окончание "26.10.2012 18:35:43". - эти события сквитированы вместе, здесь нет никакой последовательности.

Автор - Eapold
Дата добавления - 22.11.2012 в 12:46
Gustav Дата: Четверг, 22.11.2012, 14:10 | Сообщение № 7
Группа: Админы
Ранг: Участник клуба
Сообщений: 2797
Репутация: 1161 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Для начала еще можно применить такую формулу массива (Ctrl+Shift+Enter):

[vba]
Code
=ПОИСКПОЗ(ЛОЖЬ;ЕОШ(ПОИСК({
"ПРЕДЕЛЬНАЯ ЗАГАЗОВАННОСТЬ В ПОМЕЩЕНИИ МНС, Т.";
"ПОМЕЩЕНИЕ НАСОСНОГО ЗАЛА. ЗАПУСК ПРОДУВКИ";
"СИРЕНУ НА УЛИЦЕ ВКЛЮЧИТЬ";
"ТАБЛО ""ГАЗ - НЕ ВХОДИ"", ""ГАЗ - УХОДИ"" В ПОМЕЩЕНИИ МНС И СНАРУЖИ - ВКЛЮЧИТЬ";
"СИРЕНУ В МНС - ВКЛЮЧИТЬ";
"ВЫТЯЖНАЯ ВЕНТИЛЯЦИЯ. ВЫТЯЖНОЙ ВЕНТИЛЯТОР №?. АВТОМАТИЧЕСКИ ПУСТИТЬ";
"ВЫТЯЖНАЯ ВЕНТИЛЯЦИЯ. ВЫТЯЖНОЙ ВЕНТИЛЯТОР №?. ВКЛЮЧИЛСЯ"
};A1));0)-1
[/vba]
Она покажет 0 для главного события, 1-6 для соответствующих событий (с листа "Эталон") и #Н/Д для прочих событий. С ее помощью можно отфильтровать из общего потока записи, имеющие отношение к задаче. И далее уже поконкретнее разбираться с №1..4 среди гораздо меньшего количества записей.

Кстати, автофильтром находится всего 92 записи (не #н/д) из 8915.


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал Gustav - Четверг, 22.11.2012, 14:15
 
Ответить
СообщениеДля начала еще можно применить такую формулу массива (Ctrl+Shift+Enter):

[vba]
Code
=ПОИСКПОЗ(ЛОЖЬ;ЕОШ(ПОИСК({
"ПРЕДЕЛЬНАЯ ЗАГАЗОВАННОСТЬ В ПОМЕЩЕНИИ МНС, Т.";
"ПОМЕЩЕНИЕ НАСОСНОГО ЗАЛА. ЗАПУСК ПРОДУВКИ";
"СИРЕНУ НА УЛИЦЕ ВКЛЮЧИТЬ";
"ТАБЛО ""ГАЗ - НЕ ВХОДИ"", ""ГАЗ - УХОДИ"" В ПОМЕЩЕНИИ МНС И СНАРУЖИ - ВКЛЮЧИТЬ";
"СИРЕНУ В МНС - ВКЛЮЧИТЬ";
"ВЫТЯЖНАЯ ВЕНТИЛЯЦИЯ. ВЫТЯЖНОЙ ВЕНТИЛЯТОР №?. АВТОМАТИЧЕСКИ ПУСТИТЬ";
"ВЫТЯЖНАЯ ВЕНТИЛЯЦИЯ. ВЫТЯЖНОЙ ВЕНТИЛЯТОР №?. ВКЛЮЧИЛСЯ"
};A1));0)-1
[/vba]
Она покажет 0 для главного события, 1-6 для соответствующих событий (с листа "Эталон") и #Н/Д для прочих событий. С ее помощью можно отфильтровать из общего потока записи, имеющие отношение к задаче. И далее уже поконкретнее разбираться с №1..4 среди гораздо меньшего количества записей.

Кстати, автофильтром находится всего 92 записи (не #н/д) из 8915.

Автор - Gustav
Дата добавления - 22.11.2012 в 14:10
Eapold Дата: Четверг, 22.11.2012, 14:34 | Сообщение № 8
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Gustav, у меня почемуто все 0 показали..может не туда функцию вставил?
 
Ответить
СообщениеGustav, у меня почемуто все 0 показали..может не туда функцию вставил?

Автор - Eapold
Дата добавления - 22.11.2012 в 14:34
Gustav Дата: Четверг, 22.11.2012, 14:58 | Сообщение № 9
Группа: Админы
Ранг: Участник клуба
Сообщений: 2797
Репутация: 1161 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Нужно было вставить на лист Данные в ячейку B1 (или любую другую из первой строки, кроме A1, естественно).
Ввод формулы завершить не просто Enter, а Ctrl+Shift+Enter. Потом формулу скопировать ниже по столбцу B.


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеНужно было вставить на лист Данные в ячейку B1 (или любую другую из первой строки, кроме A1, естественно).
Ввод формулы завершить не просто Enter, а Ctrl+Shift+Enter. Потом формулу скопировать ниже по столбцу B.

Автор - Gustav
Дата добавления - 22.11.2012 в 14:58
Eapold Дата: Четверг, 22.11.2012, 16:03 | Сообщение № 10
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Gustav, Получилось.
Теперь выходит там где иду подряд от 0 до 6 то что нам надо.
Как теперь дальше алгоритмы на этом строить?


Сообщение отредактировал Eapold - Четверг, 22.11.2012, 16:22
 
Ответить
СообщениеGustav, Получилось.
Теперь выходит там где иду подряд от 0 до 6 то что нам надо.
Как теперь дальше алгоритмы на этом строить?

Автор - Eapold
Дата добавления - 22.11.2012 в 16:03
Gustav Дата: Четверг, 22.11.2012, 16:17 | Сообщение № 11
Группа: Админы
Ранг: Участник клуба
Сообщений: 2797
Репутация: 1161 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Аха, т.е. даже если в общей таблице (без фильтра) между этими строчками идут по 100 других (#Н/Д), но мы включаем фильтр и видим какие-то из них идущими подряд от 0 до 6 (или, если сверху, то от 6 до 0), то эти 7 строк (из автофильтра) и есть то, что надо?

Хорошо. И что с ними дальше надо сделать?


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеАха, т.е. даже если в общей таблице (без фильтра) между этими строчками идут по 100 других (#Н/Д), но мы включаем фильтр и видим какие-то из них идущими подряд от 0 до 6 (или, если сверху, то от 6 до 0), то эти 7 строк (из автофильтра) и есть то, что надо?

Хорошо. И что с ними дальше надо сделать?

Автор - Gustav
Дата добавления - 22.11.2012 в 16:17
Eapold Дата: Четверг, 22.11.2012, 16:25 | Сообщение № 12
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Gustav, теперь надо эту комбинацию скопировать на лист Итог (чтоб там формировался журнал без пробелов), и закрасить зеленым цветом ячейку в листе Анализ.
По точке №3 алгоритм нарушен, поэтому надо скопировать всеравно 7 строк в Итог, и покрасить красным цветом в Анализ
По точке №4 (я когда файл уменьшал сообщения по точке №4 удалил) закрасить красным ячеку в Анализ, и еще правее закрасить красным для того что бы видно было что это событие 0 вообще не нашлось.
Все возможные случаи у нас будут разобраны:
1. все в порядке т1, т2,
2. не все в порядке событие 0 есть а дальше алгоритм напутан
3. вообще все в беспорядке нет даже события 0

ps. для наглядности на данном этапе можно подкрасить цветом найденые от 0-7 события.


Сообщение отредактировал Eapold - Четверг, 22.11.2012, 17:06
 
Ответить
СообщениеGustav, теперь надо эту комбинацию скопировать на лист Итог (чтоб там формировался журнал без пробелов), и закрасить зеленым цветом ячейку в листе Анализ.
По точке №3 алгоритм нарушен, поэтому надо скопировать всеравно 7 строк в Итог, и покрасить красным цветом в Анализ
По точке №4 (я когда файл уменьшал сообщения по точке №4 удалил) закрасить красным ячеку в Анализ, и еще правее закрасить красным для того что бы видно было что это событие 0 вообще не нашлось.
Все возможные случаи у нас будут разобраны:
1. все в порядке т1, т2,
2. не все в порядке событие 0 есть а дальше алгоритм напутан
3. вообще все в беспорядке нет даже события 0

ps. для наглядности на данном этапе можно подкрасить цветом найденые от 0-7 события.

Автор - Eapold
Дата добавления - 22.11.2012 в 16:25
Всем Дата: Пятница, 23.11.2012, 15:51 | Сообщение № 13
Группа: Гости
Больше нет ни у кого никаких мыслей?
 
Ответить
СообщениеБольше нет ни у кого никаких мыслей?

Автор - Всем
Дата добавления - 23.11.2012 в 15:51
Gustav Дата: Пятница, 23.11.2012, 16:18 | Сообщение № 14
Группа: Админы
Ранг: Участник клуба
Сообщений: 2797
Репутация: 1161 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Я подумываю о том, как бы однозначно присвоить последовательности строк с кодами от 0 до 6 некий единый номер. И так для каждой такой последовательности - свой уникальный номер, чтобы отличать их друг от друга. Пока конструктивных мыслей нет.


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеЯ подумываю о том, как бы однозначно присвоить последовательности строк с кодами от 0 до 6 некий единый номер. И так для каждой такой последовательности - свой уникальный номер, чтобы отличать их друг от друга. Пока конструктивных мыслей нет.

Автор - Gustav
Дата добавления - 23.11.2012 в 16:18
Hugo Дата: Пятница, 23.11.2012, 17:18 | Сообщение № 15
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3691
Репутация: 790 ±
Замечаний: 0% ±

365
В задачу не вникал - уж слишком много текста smile
Но насчёт последовательности - может собрать номера строк в массивы?
Или каждому номеру группы в словаре присвоить одинаковый item?
Или словарь названий групп, у каждого в item массив номеров строк?
Я думаю последнее функциональнее.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеВ задачу не вникал - уж слишком много текста smile
Но насчёт последовательности - может собрать номера строк в массивы?
Или каждому номеру группы в словаре присвоить одинаковый item?
Или словарь названий групп, у каждого в item массив номеров строк?
Я думаю последнее функциональнее.

Автор - Hugo
Дата добавления - 23.11.2012 в 17:18
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!