7.7 Фамилия, Имя, Отчество

Тема в разделе "Отчеты и обработки для "1С:Предприятие 7.7"", создана пользователем Steelrat, 8 ноя 2006.

  1. TopicStarter Overlay
    Steelrat
    Offline

    Steelrat

    Регистрация:
    20 апр 2006
    Сообщения:
    14
    Симпатии:
    0
    Баллы:
    1
    Помогите советом пожалуйста!
    Как выдрать из поля с фамилией, именем и отчеством отдельно фамилию, имя, отчество
    ( например поле «Иванов Иван Иванович» - поле: «Иванов», поле:«Иван», поле:«Иванович»)
    Программа 1С:Предприятие – 7,7
    Заранее благодарен!
  2. Prospero
    Offline

    Prospero Опытный в 1С

    Регистрация:
    13 сен 2006
    Сообщения:
    111
    Симпатии:
    0
    Баллы:
    26
    1. найди позиции пробелов, выдерни значения между ними )
    2. замени пробелы на "," (запятые) через СтрЗаменить(<СтрИсточник>, <СтрПодстрока>, <СтрЗамены>), создай "СписокЗначений", забей в него строку через ИзСтрокиСРазделителями(<Строка>), считай строки списка через ТвоеПоле = СписокЗначений.ПолучитьЗначение(НомерСтроки,Стр);
    3. замени пробелы на "РазделительСтрок", выдирай значения через ПолучитьСтроку(<НомерСтроки>)...
  3. Именин...
    Offline

    Именин...

    Регистрация:
    1 ноя 2006
    Сообщения:
    9
    Симпатии:
    0
    Баллы:
    1
    ПерменнаяФИО=СокрЛП(Иванов Иван Иванович);

    Поз=Найти(ПерменнаяФИО," "); //Нашли первую позицию вхождения пробела в строку.

    Фамилия=СокрЛП(Лев(ПерменнаяФИО,Поз-1)); //Получили значение фамилия

    ПерменнаяФИО=СокрЛП(Сред(ПерменнаяФИО,Поз+1)); //Урезали строкуна фамилие, осталось "Иван Иванович"

    Поз=Найти(ПерменнаяФИО," "); //Нашли первую позицию вхождения пробела в строку.
    Имя=СокрЛП(Лев(ПерменнаяФИО,Поз-1)); //Получили значение Имя
    ПерменнаяФИО=СокрЛП(Сред(ПерменнаяФИО,Поз+1)); //Урезали строку на имя, осталось "Иванович".

    Отчество=ПерменнаяФИО; //Получили значение отчества. B)


    А если написано типа "Иванов Иван Иванович", тогда по твоей схеме получиться "Иванов,,,,Иван,,,,,Иванович" и список будет
    1. Иванов
    2.
    3.
    4.
    5. Иван
    6.
    7.
    8.
    9.
    10. Иванович
    :unsure:
  4. Prospero
    Offline

    Prospero Опытный в 1С

    Регистрация:
    13 сен 2006
    Сообщения:
    111
    Симпатии:
    0
    Баллы:
    26
    Думаю, имеется ввиду больше чем 1 пробел между словами? :)
    Я лишь примерные варианты обрисовал...

    Тем более, что ФИО - частный случай ))
    А если это не ФИО, а перечень из 100 элементов, разделенных пробелами? (Вдруг какой-то мазохист решил строку ввести такую)
    Что же касается лишних пробелов :
    Возможно, где-то ошибся - не проверял - писалось в Блокноте - нет на работе 1С :)

    Код:
    //На входе - строка и разделитель, который разделяет слова.
    Функция РазбитьСтроку(БольшаяБольшаяСтрока, Разд)
    Перем СписокЗначений2, СписокЗначений2, СтрокаФИО, СтрокаСписка, Стр;
    СписокЗначений1 = СоздатьОбъект("СписокЗначений");
    СписокЗначений2 = СоздатьОбъект("СписокЗначений");
    СтрокаСписка = "";
    СтрокаФИО = СтрЗаменить(БольшаяБольшаяСтрока, Разд, ",");
    СписокЗначений1.ИзСтрокиСРазделителями(СтрокаФИО);
    Для НомерСтроки = 1 По СписокЗначений1.РазмерСписка Цикл
    СтрокаСписка = СписокЗначений.ПолучитьЗначение(НомерСтроки,Стр);
    // Не помню - что там возвращается, если строка списка пустая ), поэтому сразу 2 проверки
    // В общем, кому надо - сам подправит код.
    Если (ПустоеЗначение(СтрокаСписка) = 0) ИЛИ (СтрокаСписка<>"") Тогда
    СписокЗначений2 = ДобавитьЗначение(СтрокаСписка);
    КонецЦикла;
    Возврат СписокЗначений2;
    КонецФункции
    
    
    На выходе имеем Список без пустых строк и дальше с ним работаем...
    Код:
    Процедура ПолучитьФИО;
    Список = СоздатьОбъект("СписокЗначений");
    Список = РазбитьСтроку(СтрокаФИО, " ");
    Фамилия = Список.ПолучитьЗначение(1,Стр);
    Имя = Список.ПолучитьЗначение(2,Стр);
    Отчество = Список.ПолучитьЗначение(3,Стр);
    КонецПроцедуры
    
    
    Думается, человеку теперь более чем достаточно примеров и информации, поэтому не стоит заострять внимание на этом ))).

    В дополнение:
    2 Именин...
    Спасибо, что подробно описал П.1 :)
    2 Steelrat
    Если думаешь часто пользоваться примером Именин... - оберни все это дело в отдельную глобальную процедуру и юзай )
    Удачи.
  5. TopicStarter Overlay
    Steelrat
    Offline

    Steelrat

    Регистрация:
    20 апр 2006
    Сообщения:
    14
    Симпатии:
    0
    Баллы:
    1
    Огромное спасибо Prospero и Именин... за помощь!
    Сделал по первому пункту Prospero, расписанному Именин...
    Все работает! :unsure:
Похожие темы
  1. 73elena
    Ответов:
    6
    Просмотров:
    2.019
Загрузка...

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