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

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

  1. TopicStarter Overlay
    ILDARIAN
    Offline

    ILDARIAN Опытный в 1С

    Регистрация:
    6 янв 2013
    Сообщения:
    131
    Симпатии:
    1
    Баллы:
    29
    Добрый день!

    Такая задачка: нужно из строки получить последовательность из 5 цифр подряд. И записать её в переменную.
    ------------
    Например если есть строка : "ываыва 8ва07ываыв789а!! ываыва7ы!! ваа88773фывн7№№;?*(*" , то нужно получить от сюда только 88773. Как это можно сделать ?
  2. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Перебираете строку по маске.

    В СП посмотрите Найти()
  3. Tiger86
    Offline

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

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

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    а только цифровую последовательность, или вот так может быть "888,2"

    если может, то вот
    Код:
    стр = ЭлементыФормы.ПолеВвода1.Значение;
    Пока СтрДлина(стр) > 5 Цикл
    тмп = Лев(стр, 5);
    Попытка
    ч = Число(тмп);
    ЭлементыФормы.ПолеВвода2.Значение = ЭлементыФормы.ПолеВвода2.Значение + тмп + ", ";
    Исключение
    
    КонецПопытки;
    стр = Прав(стр, СтрДлина(стр) - 1);
    КонецЦикла;
    
  5. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    вы почитайте про функцию Найти()
  6. TopicStarter Overlay
    ILDARIAN
    Offline

    ILDARIAN Опытный в 1С

    Регистрация:
    6 янв 2013
    Сообщения:
    131
    Симпатии:
    1
    Баллы:
    29
    буду делать через функцию найти()..
    Вот такой код

    Код:
    Функция ПолучитьИндексКонтрагента(ТекСтрока)
    НоваяСтрока = "";
    Если Найти(ТекСтрока, "12345") > 0 Тогда
    НоваяСтрока = НоваяСтрока + ТекСтрока;
    КонецЕсли;
    возврат НоваяСтрока;
    
    
    КонецФункции
    
    Вопрос: как вместо "12345" задать маску из пяти произваольных чисел ?
  7. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    и как она тут поможет?
  8. TopicStarter Overlay
    ILDARIAN
    Offline

    ILDARIAN Опытный в 1С

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

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    через Найти я не знаю как задать маску и можно ли это сделать, вот подкорректировала свой вариант
    Код:
    стр = ЭлементыФормы.ПолеВвода1.Значение;
    Пока СтрДлина(стр) > 5 Цикл
    тмп = Лев(стр, 5);
    Если Найти(тмп, ",") = 0 И Найти(тмп, ".") = 0 Тогда
    Попытка
    ч = Число(тмп);
    ЭлементыФормы.ПолеВвода2.Значение = ЭлементыФормы.ПолеВвода2.Значение + тмп + ", ";
    Исключение  
    КонецПопытки;
    КонецЕсли;
    стр = Прав(стр, СтрДлина(стр) - 1);
    КонецЦикла;
    
  10. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Читать умеете ?????
  11. Tiger86
    Offline

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

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

    ILDARIAN Опытный в 1С

    Регистрация:
    6 янв 2013
    Сообщения:
    131
    Симпатии:
    1
    Баллы:
    29
    я это читал, если бы мне нужно было найти конкретный номер, то данная функция помогла бы.
  13. TopicStarter Overlay
    ILDARIAN
    Offline

    ILDARIAN Опытный в 1С

    Регистрация:
    6 янв 2013
    Сообщения:
    131
    Симпатии:
    1
    Баллы:
    29
    Немного не могу разобраться. Функция перебирает по по 5 символов строки, пока не найдет 5 цифр подряд, при чем в таком порядке 1-5, 6-10 и тд ?
  14. Ludmillka
    Offline

    Ludmillka Опытный в 1С

    Регистрация:
    13 сен 2013
    Сообщения:
    159
    Симпатии:
    0
    Баллы:
    26
    Может попробовать поискать через Регулярные выражения?
  15. TopicStarter Overlay
    ILDARIAN
    Offline

    ILDARIAN Опытный в 1С

    Регистрация:
    6 янв 2013
    Сообщения:
    131
    Симпатии:
    1
    Баллы:
    29
    ещё ищет запятые и точки. Прокомментируйте пожалуйста код.
  16. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    1-5, 2-6, 3-7 и т.д.
  17. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Вот вам алгоритм, а не код.
    0. Проверяете строку (каждый символ) на равенство цифре (или же цифровому коду ASCI), все это делаете в цикле длиной 5. (или делаете свой итератор, но условие = 5). Если такая строка находится - переходим к 1. иначе на 3.
    1. Используете функцию найти(). если находит - возвращает номер позиции первого сивола (подстроки)
    2. Обрезаете слева строку до этого символа длиной 5 символов.
    3. Коенц, е....т
  18. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    Код:
    стр = ЭлементыФормы.ПолеВвода1.Значение;
    Пока СтрДлина(стр) > 5 Цикл  //цикл идет до последней комбинации из 5 символов
    тмп = Лев(стр, 5); //для проверки всегда беерем 5 соседних символов сначала строки
    Если Найти(тмп, ",") = 0 И Найти(тмп, ".") = 0 Тогда   //исключаем "," или".", в этом случае Число() - отработает и выдаст дробное число
    Попытка
    ч = Число(тмп); //если точек и запятых нет, пытаемся преобразовать в число
    ЭлементыФормы.ПолеВвода2.Значение = ЭлементыФормы.ПолеВвода2.Значение + тмп + ", "; //если смогли, то комбинацию выводим в поле на форме
    Исключение  
    КонецПопытки;
    КонецЕсли;
    стр = Прав(стр, СтрДлина(стр) - 1); //отрезаем от строки левый символ и повторяем процедуру
    КонецЦикла;
    
  19. TopicStarter Overlay
    ILDARIAN
    Offline

    ILDARIAN Опытный в 1С

    Регистрация:
    6 янв 2013
    Сообщения:
    131
    Симпатии:
    1
    Баллы:
    29
    Если функция находит "," или "." то заменяет их на 0 ?
  20. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Это не замена, а условие.

    Читали описание НАЙТИ() ????

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