8.х Получить последовательность символов из строки

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем ILDARIAN, 20 ноя 2013.

  1. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    я вас не зря спрашивала надо ли "," и "." учитывать, вы сказали - нет. Потому это проверка, если нашли запятую или точку, то не надо тратить время и проверять подходит ли нам последовательность (ее исключаем вот и все). 0 - это то, что вернет функция, если не найдет указанных символов (что нам и надо в нашем случае)
  2. Ludmillka
    Offline

    Ludmillka Опытный в 1С

    Регистрация:
    13 сен 2013
    Сообщения:
    159
    Симпатии:
    0
    Баллы:
    26
    я сделала через регулярные выражения:

    Код:
    Стр="ываыва 8ва07ываыв789а!! ываыва7ы!! ваа88773фывн7№№;?*(*";
    RegExp=Новый COMОбъект("VBScript.RegExp");
    RegExp.MultiLine=Ложь;
    RegExp.Global=Истина;
    RegExp.Pattern = "[0-9]{5}";
    Str1 = СокрЛП(Стр);
    //Заменяем наши цифры на кодовое слово которое будем искать
    Matches=RegExp.Replace(Str1,"ЦИФРЫ");
    ДлиннаСтроки= СтрДлина(Str1);
    НомерПервойЦифры=Найти(Matches,"ЦИФРЫ");
    ВозвращаемаяСтрока=Лев(Прав(Str1,ДлиннаСтроки-НомерПервойЦифры+1),5);
    Сообщить(ВозвращаемаяСтрока);
    
    На выходе получаем строку, с которой делаем что хотим
  3. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    отлично, возьму на заметку, спасибо
  4. TopicStarter Overlay
    ILDARIAN
    Offline

    ILDARIAN Опытный в 1С

    Регистрация:
    6 янв 2013
    Сообщения:
    131
    Симпатии:
    1
    Баллы:
    29
    мне нужно было сделать это для всех элементов справочника

    Код:
    выборка = Справочники.ОбщиеКонтрагенты.Выбрать();
    спр = выборка.ПолучитьОбъект();
    Пока выборка.Следующий() Цикл
    
    Стр = спр.Адрес;
    RegExp=Новый COMОбъект("VBScript.RegExp");
    RegExp.MultiLine=Ложь;
    RegExp.Global=Истина;
    RegExp.Pattern = "[0-9]{5}";
    Str1 = СокрЛП(Стр);
    //Заменяем наши цифры на кодовое слово которое будем искать
    Matches=RegExp.Replace(Str1,"ЦИФРЫ");
    ДлиннаСтроки= СтрДлина(Str1);
    НомерПервойЦифры=Найти(Matches,"ЦИФРЫ");
    ВозвращаемаяСтрока=Лев(Прав(Str1,ДлиннаСтроки-НомерПервойЦифры+1),5);
    спр.Индекс = ВозвращаемаяСтрока;
    спр.Записать();
    КонецЦикла;
    
    выдает ошибку: Ошибка при вызове метода контекста (ПолучитьОбъект)
    спр = выборка.ПолучитьОбъект();
    по причине:
    Элемент не выбран!

    Хотя есть и другие процедуры по замене правке элементов справочника, и они работают сделанные таким же образом, и они работают
  5. Annie
    Offline

    Annie Опытный в 1С Команда форума

    Регистрация:
    10 фев 2010
    Сообщения:
    949
    Симпатии:
    23
    Баллы:
    29
    Выборка - это выборка из результата запроса, какой там нафиг объект?
    Наверное д.б., что-то типа
    Код:
    спр = Выборка.Ссылка.ПолучитьОбъект()
  6. TopicStarter Overlay
    ILDARIAN
    Offline

    ILDARIAN Опытный в 1С

    Регистрация:
    6 янв 2013
    Сообщения:
    131
    Симпатии:
    1
    Баллы:
    29
    перенес эту строчку внутрь цикла и заработало
  7. Annie
    Offline

    Annie Опытный в 1С Команда форума

    Регистрация:
    10 фев 2010
    Сообщения:
    949
    Симпатии:
    23
    Баллы:
    29
    Пардон, меня переглючило, у вас же прямой запрос к справочнику
  8. TopicStarter Overlay
    ILDARIAN
    Offline

    ILDARIAN Опытный в 1С

    Регистрация:
    6 янв 2013
    Сообщения:
    131
    Симпатии:
    1
    Баллы:
    29
    Не много доработать нужно процедуру. В случае если в строке нет последовательности из 5 цифр, то она записывает в переменную первые 5 символов строки, какими бы они ни были. А нужно записывать туда пустую строку
  9. Ludmillka
    Offline

    Ludmillka Опытный в 1С

    Регистрация:
    13 сен 2013
    Сообщения:
    159
    Симпатии:
    0
    Баллы:
    26
    Вот вам с проверкой на вхождение искомой подстроки:
    Код:
    //Стр="ываыва 8ва07ываыв789а!! ываыва7ы!! ваа88773фывн7№№;?*(*";
    Стр="ываыва 8ва07ываыв789а!! ываыва7ы!! ваафывн7№№;?*(*";
    RegExp=Новый COMОбъект("VBScript.RegExp");
    RegExp.MultiLine=Ложь;
    RegExp.Global=Истина;
    RegExp.Pattern = "[0-9]{5}";
    Str1 = СокрЛП(Стр);
    Если RegExp.Test(Str1)=Истина тогда
    //Заменяем наши цифры на кодовое слово которое будем искать
    Matches=RegExp.Replace(Str1,"ЦИФРЫ");
    ДлиннаСтроки= СтрДлина(Str1);
    НомерПервойЦифры=Найти(Matches,"ЦИФРЫ");
    ВозвращаемаяСтрока=Лев(Прав(Str1,ДлиннаСтроки-НомерПервойЦифры+1),5);
    Сообщить(ВозвращаемаяСтрока);
    Иначе
    Сообщить("   ");
    КонецЕсли;
    
  10. Kasper25
    Offline

    Kasper25

    Регистрация:
    21 ноя 2013
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    1
    СтрокаВвода - элемент формы типа строка

    Код:
    &НаКлиенте
    Процедура найтиПятьЦифр(Команда)
    ДлинаСтроки=СтрДлина(СтрокаВвода);
    шаг=1;
    Пока  шаг<=длинастроки цикл
    Код=КодСимвола(СтрокаВвода,шаг);
    ЭтоЧисло=0;
    Если Код=48 тогда
    ЭтоЧисло=1;
    ИначеЕсли  Код=49 тогда
    ЭтоЧисло=1;
    ИначеЕсли  Код=50 тогда
    ЭтоЧисло=1;
    ИначеЕсли  Код=51 тогда
    ЭтоЧисло=1;
    ИначеЕсли  Код=52 тогда
    ЭтоЧисло=1;
    ИначеЕсли  Код=53 тогда
    ЭтоЧисло=1;
    ИначеЕсли  Код=54 тогда
    ЭтоЧисло=1;
    ИначеЕсли  Код=55 тогда
    ЭтоЧисло=1;
    ИначеЕсли  Код=56 тогда
    ЭтоЧисло=1;
    ИначеЕсли  Код=57 тогда
    ЭтоЧисло=1;
    конецЕсли;
    Если эточисло=1 тогда
    результат=результат+Символ(код);
    эточисло=0;
    если СтрДлина(результат)=5 тогда
    сообщить(результат);
    КонецЕсли;
    иначе
    результат="";
    конецесли;
    шаг=шаг+1;
    КонецЦикла
    КонецПроцедуры

    работает как часы)
  11. Kasper25
    Offline

    Kasper25

    Регистрация:
    21 ноя 2013
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    1
    Сначала что-то вспылил)

    Код:
    &НаКлиенте
    Процедура найтиПятьЦифр(Команда)
    ДлинаСтроки=СтрДлина(СтрокаВвода);
    шаг=1;
    Пока  шаг<=длинастроки цикл
    Код=КодСимвола(СтрокаВвода,шаг);
    ЭтоЧисло=0;
    Если Код=48 или Код=49 или Код=50 или
    Код=51 или Код=52 или Код=53 или
    Код=54 или Код=55 или Код=56 или код=57 тогда
    ЭтоЧисло=1;
    конецЕсли;
    
    Если эточисло=1 тогда
    результат=результат+Символ(код);
    эточисло=0;
    если СтрДлина(результат)=5 тогда
    сообщить(результат);
    КонецЕсли;
    иначе
    результат="";
    конецесли;
    шаг=шаг+1;
    КонецЦикла
    КонецПроцедуры
    
  12. LordMaverick
    Online

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.431
    Симпатии:
    372
    Баллы:
    104
    хоть и давно, но :)
    Код:
    &НаКлиенте
    Процедура найтиПятьЦифр(Команда)
    ДлинаСтроки=СтрДлина(СтрокаВвода);
    шаг=1;
    Пока шаг<=длинастроки цикл
    Код=КодСимвола(СтрокаВвода,шаг);
    ЭтоЧисло=0;
    Если Код>=48 И Код<=57 Тогда / /как вариант Код>47 И Код<58
    результат=результат+Символ(код);
    Эточисло=0;
    Если СтрДлина(результат)=5 тогда
    Сообщить(результат);
    Иначе
    результат="";
    КонецЕсли;
    шаг=шаг+1;
    КонецЦикла
    КонецПроцедуры
    

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