Вверх ↑
Этот топик читают: Гость
Ответов: 257
Рейтинг: -2
#1: 2013-10-27 17:00:23 ЛС | профиль | цитата
Не справляюсь, справка и поиск по форуму не помогли. Есть таблица, где в первой ячейке наименование и номер. Наименование может состоять как из одного, так и из нескольких слов. Номер может состоять из цифр, букв, вот такой штуки "-", номер всегда больше 4х символов. Необходимо отделать номер от наименования, тоесть разбить наименование и номер по разным столбцам. Я уже догадываюсь что придется использовать что-то из вкладки RegExpr, но пока что не могу понять логику, по которой все это можно разделять.

Вот некоторые примеры того что нужно разделить:

Вот таких номеров большинство:
Шрус внут передний левый 705401359
Шрус внут передний правый 705401357

При чем он может быть записан вот так:
Суппорт задний 705600859 А

еще много таких:
Блок газа 28P-26250-01-00

Может быть еще записан второй номер, его можно выкинуть, а можно оставить
Втулка стабилизатора 3B4-2386G-00-00 92139-0023

таких:
Прокладка ГБЦ 11141-21H00
Прокладка генератора 1000к3-8 11483-18G00

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

Еще важный момент - таблица импортируется из экселевского файла через OLEDB, вот схема:
code_32174.txt

В идеале хотелось бы сделать чтоб в процессе добавления строк в таблицу, наименование разбивалось на наименование и номер, чтоб не делать две таблицы, а добавлять сразу с выведеным в дополнительную колонку номером.


карма: 0

0
файлы: 1code_32174.txt [2KB] [196]
Ответов: 5446
Рейтинг: 323
#2: 2013-10-27 17:35:43 ЛС | профиль | цитата
mudfactory, разбивай по пробелу, номером считай последнюю часть. Если в предпоследнем блоке только цифры и дефис, то скорее всего это тоже номер. Всё, что останется после "отсева" номера - название. Без ручной работы не обойтись (например "3B4-2386G-00-00" алгоритм присоединит к имени), но думаю бОльшую часть работы автомат за тебя сделает.
карма: 1

0
Ответов: 257
Рейтинг: -2
#3: 2013-10-27 18:12:38 ЛС | профиль | цитата
по пробелу не получится, название может быть из нескольких слов. Жаль нет компонента типа RegExpr который по маске разбивать будет
карма: 0

0
Гость
Ответов: 17029
Рейтинг: 0
#4: 2013-10-27 19:57:26 правка | ЛС | профиль | цитата


Редактировалось 4 раз(а), последний 2025-01-10 20:43:41
карма: 0

0
Разработчик
Ответов: 26163
Рейтинг: 2127
#5: 2013-10-27 19:59:58 ЛС | профиль | цитата
Какое-то засилие IP-шников сегодня
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#6: 2013-10-27 20:02:34 ЛС | профиль | цитата
nesco, 85-250-61-54.bb.netvision - это я. Выбрасывает регулярно. Примерно каждые 30 минут.
Попутно вопрос. При использовании компонентов из вкладки Data Source как получить Handle БД ?
(лень нырять в коды)
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
1
Голосовали:mudfactory
Разработчик
Ответов: 26163
Рейтинг: 2127
#7: 2013-10-27 20:11:06 ЛС | профиль | цитата
Tad писал(а):
это я

Зато в другом топике IP-шники вакханалию устроили
------------ Дoбавленo в 20.11:
Tad писал(а):
При использовании компонентов из вкладки Data Source как получить Handle БД ?

А никак, не предусмотрено изначально. Да и зачем, не совсем понятно
карма: 22

0
Ответов: 257
Рейтинг: -2
#8: 2013-10-27 20:17:02 ЛС | профиль | цитата
85-250-61-54.bb.netvision писал(а):
code_32176.txt


Это очень круто. Только у меня таблица импортируется в MTstr из экселя, а в базе она должна быть уже с разделенными именами, для осуществления поиска. Или сначала загонять в базу так, потом выводить с помощью вашего кода и потом опять загонять уже с разделенными столбцами...
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#9: 2013-10-27 20:20:16 ЛС | профиль | цитата
nesco писал(а):
Да и зачем, не совсем понятно
Чтобы подключать свои функции.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 257
Рейтинг: -2
#10: 2013-10-27 20:50:17 ЛС | профиль | цитата
походу придется так и делать
карма: 0

0
Ответов: 5446
Рейтинг: 323
#11: 2013-10-27 21:04:08 ЛС | профиль | цитата
mudfactory писал(а):
по пробелу не получится, название может быть из нескольких слов. Жаль нет компонента типа RegExpr который по маске разбивать будет

Ты разницу между "последний" и "второй" понимаешь? Если номер всегда в конце, не имеет пробелов, и отделён от названия пробелом, то мой алгоритм будет работать.
карма: 1

0
Ответов: 16884
Рейтинг: 1239
#12: 2013-10-27 21:12:50 ЛС | профиль | цитата
mudfactory, ты ещё не понял, что копаешь не в ту сторону ?
iarspider, а тут как ?
atut.png
Уверен, что такого бардака у них навалом. Зачем он их хочет делить - совершенно не понятно...
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1atut.png [56.1KB] [306]
Ответов: 257
Рейтинг: -2
#13: 2013-10-27 21:58:32 ЛС | профиль | цитата
Tad писал(а):
Зачем он их хочет делить - совершенно не понятно...


делить нужно чтоб искать применяемость по номеру
------------ Дoбавленo в 21.54:
Tad писал(а):
iarspider, а тут как ?


а тут номер не все числа, в первом случае номер первым идет, второе число - это не нужный номер) Во втором случае перед номером 1000 к3-8 - это модель
------------ Дoбавленo в 21.58:
впрнципе там типа номера всего трех типов -
3B4-2386G-00-00
705600859
11141-21H00

эти всегда состоят из одинакового кол-ва знаков. Остальное кроме названия можно отсеивать


карма: 0

0
Ответов: 16884
Рейтинг: 1239
#14: 2013-10-27 22:06:46 ЛС | профиль | цитата
SELECT * from <таблица> WHERE name LIKE "%%1%"
где %1 - это твой, к примеру, 3B4-2386G-00-00
И найдет тебе все строки где есть этот номер.

Что ещё надо ?
Попробуй в своей схеме
SELECT f1, f4, f5, f7, f9 FROM `%1`.`Sheet1&#36;`  WHERE f1 LIKE '%3B4-2386G-00-00%';
Это если наименование с номером находится в колонке F1
Или
SELECT f1 AS "Наименование", count() AS "Израсходовано" FROM `%1`.`Sheet1&#36;`  WHERE f1 LIKE '%3B4-2386G-00-00%' ;
Получишь сколько штук.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 257
Рейтинг: -2
#15: 2013-10-27 22:32:21 ЛС | профиль | цитата
Tad писал(а):
Что ещё надо ?


надо отделить этот номер. Затем. что программа используя этот номер возвращает применяемость к конкретным моделям. Искать я могу по наименованию, а выдавать оно из 10 одинаковых наименований должно то что подходит по применяемости. Для этого нужно производить некоторые действия с отделенным номером.
------------ Дoбавленo в 22.32:
А такой вопрос, если напрямую через OLE с файлом работать, каким запросом в него можно добавлятьизменять значения строк если та нет ID?
карма: 0

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)