Помощь - Поиск - Пользователи - Календарь
Полная версия: Фамилия, Имя, Отчество
1C-PRO - Форум по 1С > Форумы по платформе "1С:Предприятие 7.7" > (7.7) Отчеты и обработки для платформы "1С:Предприятие 7.7"
Steelrat
Помогите советом пожалуйста!
Как выдрать из поля с фамилией, именем и отчеством отдельно фамилию, имя, отчество
( например поле «Иванов Иван Иванович» - поле: «Иванов», поле:«Иван», поле:«Иванович»)
Программа 1С:Предприятие – 7,7
Заранее благодарен!
Prospero
1. найди позиции пробелов, выдерни значения между ними )
2. замени пробелы на "," (запятые) через СтрЗаменить(<СтрИсточник>, <СтрПодстрока>, <СтрЗамены>), создай "СписокЗначений", забей в него строку через ИзСтрокиСРазделителями(<Строка>), считай строки списка через ТвоеПоле = СписокЗначений.ПолучитьЗначение(НомерСтроки,Стр);
3. замени пробелы на "РазделительСтрок", выдирай значения через ПолучитьСтроку(<НомерСтроки>)...
Именин...
ПерменнаяФИО=СокрЛП(Иванов Иван Иванович);

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

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

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

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

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


Цитата(Prospero @ 8.11.2006, 13:47) *

1. найди позиции пробелов, выдерни значения между ними )

А если написано типа "Иванов Иван Иванович", тогда по твоей схеме получиться "Иванов,,,,Иван,,,,,Иванович" и список будет
1. Иванов
2.
3.
4.
5. Иван
6.
7.
8.
9.
10. Иванович
cowboy.gif
Prospero
Думаю, имеется ввиду больше чем 1 пробел между словами? :)
Я лишь примерные варианты обрисовал...

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

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


На выходе имеем Список без пустых строк и дальше с ним работаем...
Код

Процедура ПолучитьФИО;
Список = СоздатьОбъект("СписокЗначений");
Список = РазбитьСтроку(СтрокаФИО, " ");
Фамилия = Список.ПолучитьЗначение(1,Стр);
Имя = Список.ПолучитьЗначение(2,Стр);
Отчество = Список.ПолучитьЗначение(3,Стр);
КонецПроцедуры



Думается, человеку теперь более чем достаточно примеров и информации, поэтому не стоит заострять внимание на этом ))).

В дополнение:
2 Именин...
Спасибо, что подробно описал П.1 :)
2 Steelrat
Если думаешь часто пользоваться примером Именин... - оберни все это дело в отдельную глобальную процедуру и юзай )
Удачи.
Steelrat
Огромное спасибо Prospero и Именин... за помощь!
Сделал по первому пункту Prospero, расписанному Именин...
Все работает! yahoo.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2008 Invision Power Services, Inc.