7.7 Отсечение слов по пробелам

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем Necrodamus, 14 май 2010.

  1. TopicStarter Overlay
    Necrodamus
    Offline

    Necrodamus Опытный в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    57
    Симпатии:
    0
    Баллы:
    26
    Доброго времени суток!
    Возможно кто-то сталкивался и подскажет...
    Как из наименования состоящего из нескольких слов вычленить,скажем, только первое слово (до первого пробела) или два слова (минуя первый пробел,до второго)?
    Теоретические понимаю как сделать,а вот практически знаний не хватает...
  2. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Вот так надо:
    Код:
    Стр="2323   3444   344334  1212 67  ";
    
    //убрали лишние пробелы если они есть
    Пока Найти(Стр,"  ")<>0 Цикл
    Стр=СтрЗаменить(Стр,"  "," ");
    КонецЦикла;
    Стр=СокрЛП(Стр);
    
    //подготовили строку	
    Стр=СтрЗаменить(Стр," ",",");
    
    Сп=СоздатьОбъект("СписокЗначений");
    Сп.ИзСтрокиСРазделителями(Стр);  
    //в списке у тебя слова... обращайся к любому по номеру
    
    
  3. TopicStarter Overlay
    Necrodamus
    Offline

    Necrodamus Опытный в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    57
    Симпатии:
    0
    Баллы:
    26
    Спасибо большое за то,что откликнулись,но Вы меня немного не так поняли...
    МНе нужно не заменить пробелы,а дойти до первого пробела и остановиться, символы которые идут за ним меня уже не интерисуют.
    Например:
    У меня есть строка: "Некая строка символов"(3 слова, и 3 пробела)...Я хочу получить следующее: "Некая" (дошли до первого пробела и остановились).Или еще вариант: "Некая строка" (дошли до второго пробела и остановились)...
  4. Time dont wait
    Offline

    Time dont wait Опытный в 1С

    Регистрация:
    20 окт 2009
    Сообщения:
    192
    Симпатии:
    0
    Баллы:
    26
    Ну написано же все:
    Код:
    Сп=СоздатьОбъект("СписокЗначений");
    Сп.ИзСтрокиСРазделителями(Стр);
    
    Все слова заносятся в список значений, а тебе только надо обратиться к нужному
  5. TopicStarter Overlay
    Necrodamus
    Offline

    Necrodamus Опытный в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    57
    Симпатии:
    0
    Баллы:
    26
    А если мне справочник из 15000 наименований нужно обработать?Как я по номеру буду обращаться?
  6. Доктор Руфус Бейли
    Offline

    Доктор Руфус Бейли Опытный в 1С

    Регистрация:
    7 апр 2010
    Сообщения:
    277
    Симпатии:
    0
    Баллы:
    26
    Итак... Синтаксис-помощник, дай нам силы!!!
    Вам нужно:
    И
    Мудрить со списками значений я не вижу профита.
  7. TopicStarter Overlay
    Necrodamus
    Offline

    Necrodamus Опытный в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    57
    Симпатии:
    0
    Баллы:
    26
    Видел...Не подходит,т.к. я не знаю какое число символов мне необходимо возвращать.
    Мне нужно пройтись по справочнику в котором имеются мед.препараты("Препарат1 в бытылке",Препарат1 в коробке"),"Препарат1 в блистере","Препарат1 еще в чем-то") из этих наименований я хочу получить строку"Препарат1" и сгрупировать его потом...
  8. Хряк
    Offline

    Хряк Профессионал в 1С

    Регистрация:
    26 сен 2007
    Сообщения:
    1.447
    Симпатии:
    37
    Баллы:
    54
    >Видел...Не подходит

    Не поверишь, подходит

    Поз=Найти(ВашаСтрока," ")
    Стр=Лев(ВашаСтрока,Поз)
    Стр будет содержать Препарат1
  9. dedalx7
    Offline

    dedalx7 Опытный в 1С

    Регистрация:
    20 май 2009
    Сообщения:
    97
    Симпатии:
    0
    Баллы:
    26
    Почему бы не сделать группы типа "Препарат 1", а в них позиции типа "Препарат 1 в банке", "Препарат 1 в тюбике" и т.д. и группировать по группам?

    А то у вас как-то излишне замудрено, возникает вопрос: как обработка должна будет угадать что название состоит из двух слов, а не из одного?

    А так, если очень хочется:

    Код:
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент() = 1 Цикл
    Наименование = Спр.Наименование;
    Точка = Найти(Наименование, " ");
    Если Точка = 0 Тогда
    ОдноСлово = Наименование;
    Иначе
    ОдноСлово = Лев(Наименование, Точка);
    Наименование = Прав(Наименование, СтрДлина(Наименование) - Точка - 1);
    Точка = Найти(Наименование, " ");
    Если Точка <> 0 Тогда
    ДваСлова = ОдноСлово + " " + Лев(Наименование, Точка);     
    КонецЕсли;
    КонецЕсли;
    
    // А вот тут уже делайте что хотите, хоть заново
    // перебирайте все элементы, ища в их наименованиях
    // вхождения строк ОдноСлово и ДваСлова
    // но это как-то не очень хорошо, и медленно очень :(
    
    КонецЦикла;
    
    
    
  10. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Методом который я привел для каждого наименования вы получили одномерный массив СписокЗначений. Размер - количество слов в наименовании.

    Препарат1 в бытылке (3 строки)
    Препарат1 еще в чем-то (4 строки)

    Итак: Проходим по справочнику и заполняем ТаблицуЗначений Из спискаЗначений для каждого наименования (количество колонок конечно можно задать жестко, а можно и ТЗ создавать после обхода всего справочника, но тогда предварительный результат нам нужно сохранить - позаботьтесь об этом).
    После этого мы получили некую матрицу слов + (необходимо еще добавить одну колонку со ссылкой на элемент справочника).
    Все - с матрицей можете делать что угодно - сортировать, группировать, сравнивать.
  11. TopicStarter Overlay
    Necrodamus
    Offline

    Necrodamus Опытный в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    57
    Симпатии:
    0
    Баллы:
    26
    Спасибо всем кто откликнулся...
    2 Dedal X:
    Я планировал определять это просто через radiobatton,но продложенный Вами способ очень интересен.
    Буду копать...

Поделиться этой страницей