8.х Оператор Формат

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Dmitrij, 10 июл 2008.

  1. TopicStarter Overlay
    Dmitrij
    Offline

    Dmitrij Опытный в 1С

    Регистрация:
    6 май 2008
    Сообщения:
    844
    Симпатии:
    1
    Баллы:
    26
    Есть некий текст разделенный запятыми, как можно его отредактировать, к примеру Саша, Петя, Вася
    нужно вывести все что находится после 1 запятой и до последней запятой т.е Саша, а все остальное не нужно. Скажите, оператор формат с этим справится, если да то как он работает?
  2. lazy
    Offline

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

    Регистрация:
    1 сен 2007
    Сообщения:
    2.127
    Симпатии:
    4
    Баллы:
    29
    Как работает функция формат можно посмотреть в СинтаксисПомошнике. Но она для такого не подходит. Для игр со строками больше подходят Найти(), Лев(), Прав(), Сред(). Так же в УПП есть функция РазложитьСтрокуВМассивПодстрок() - посмотри на нее, хороший пример работы с вышеупомянутыми функциями языка.
  3. Komich
    Offline

    Komich

    Регистрация:
    10 июл 2008
    Сообщения:
    21
    Симпатии:
    0
    Баллы:
    1
    Форматом тяжело, лучше так:

    Код:
    //Стр = "Саша, Петя, Вася"
    Стр = СтрЗаменить(Стр, ",", Символы.ПС);
    Для Сч = 1 по СтрЧислоСтрок(Стр) Цикл
    ПодСтр = СтрПолучитьСтроку(Стр, Сч);
    . . .
    КонецЦикла;
    
    
    
  4. lazy
    Offline

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

    Регистрация:
    1 сен 2007
    Сообщения:
    2.127
    Симпатии:
    4
    Баллы:
    29
    Между первой и последней запятой в данном примере находится "Петя" :)

    Komich ИМХО - код не совсем корректен, если исходить из условий задачи. Нужны символы между первой и последней запятой. Если заюзать
    Код:
    СтрЗаменить(Стр, ",", Символы.ПС)
    
    То получается, что строку мы попортили - ее потом нужно будет обратно преобразовывать заменой Символы.ПС на "," но никто по условию не сказал, что строка уже не содержит Символы.ПС и при обратном преобразовании мы вполне можем получить уже не то, что было вначале.

    В большей степени здесь нужно просто ползти по строке от момента встречи с первой запятой до момента встречи с последней. Опять же ИМХО...
  5. Komich
    Offline

    Komich

    Регистрация:
    10 июл 2008
    Сообщения:
    21
    Симпатии:
    0
    Баллы:
    1
    Да это я для примера как разбирать строки с разделителями.
    Вообще-то, если смотреть вопрос, то Саши после 1 запятой нет
  6. freedown
    Offline

    freedown

    Регистрация:
    8 июн 2007
    Сообщения:
    14
    Симпатии:
    0
    Баллы:
    1
    Код:
    //*************************************************************************************************
    // Функция ВыделитьСловоДоРазделителя()
    //
    // Выделяет подстроку из строки от начала строки до разделителя слов
    //
    // Параметры:
    //   ИсходнаяСтрока - Строка - исходная строка
    //   Разделитель - Строка -    подстрока/символ, которой разделяются слова в исходной строке
    //
    // Возвращаемое значение:
    //   Строка - выделенное слово
    //
    Функция ВыделитьСловоДоРазделителя(ИсходнаяСтрока, Разделитель)
    
    Буфер = СокрЛ(ИсходнаяСтрока);
    ПозицияРазделителя = Найти(Буфер, Разделитель);
    
    Если ПозицияРазделителя = 0 Тогда
    ИсходнаяСтрока = "";
    Возврат Буфер;
    КонецЕсли;
    
    ВыделенноеСлово = СокрЛП(Лев(Буфер, ПозицияРазделителя - 1));
    ИсходнаяСтрока = Сред(ИсходнаяСтрока, ПозицияРазделителя + СтрДлина(Разделитель));
    
    Возврат ВыделенноеСлово;
    
    КонецФункции //ВыделитьСловоДоРазделителя()
    

    Это слегка доработанная стандартная ВыделитьСлово()


    Следующий код
    Код:
    СписокИмен = "Саша, Петя, Вася";
    ИмяИзСписка = ВыделитьСловоДоРазделителя(СписокИмен, ",");
    
    нам даст СписокИмен = " Петя, Вася" и ИмяИзСписка = "Саша"
  7. thargon
    Offline

    thargon

    Регистрация:
    14 июн 2008
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    Да тут, судя по всему, надо ждать комментариев автора чтобы понять что-же на самом деле ему нужно, поскольку задача поставлена не совсем корректно:
    Если автору все-же надо чтобы вернулось значение между первой и последней запятой (и это будет "Петя" :unsure: ), то опять же, не совсем ясно как надо писать код функции - поскольку неизвестно какой вид может принять исходная строка. Например, что вернуть для "Саша, Петя, Вася, Ваня" или для "Саша, Петя" ?..
  8. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    На мисте обсуждали авторское сообщение :)

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