Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 22:02

Разбить

Автор Игорь1c, 05 дек 2014, 10:25

0 Пользователей и 1 гость просматривают эту тему.

Игорь1c

Задание - " В поле «ФИО» вводится фамилия, имя, отчество одной строкой. Причем регистр может не соблюдаться (первая буква имени с маленькой буквы, остальные с большой). Требуется «разобрать» ФИО на «Фамилию», «Имя», «Отчество» (и записать в соответствующие реквизиты). При этом нужно «исправить» регистры букв. "

Регистры букв переделать не проблема , но вот как разбить например такое - " иВАНОВиВАНсЕРГЕИЧ " на отдельные слова , что то даже не представляю . Кому не трудно опишите общий алгоритм как это сделать , если можно , то с названием функций по порядку .

freez1301

иВАНОВиВАНсЕРГЕИЧ - такую строку так:
разбиваешь ее на символы, кладешь в массив, бегаешь по массиву - как только натыкаешься на букву в нРег - отрезаешь все, что было до нее

Игорь1c

спасибо попробую
Добавлено: 05 дек 2014, 10:54


Цитата: freez1301 от 05 дек 2014, 10:35как только натыкаешься на букву в нРег

только фио может быть любое , как быть то ?

cska-fanat-kz

Цитата: Игорь1c от 05 дек 2014, 10:25В поле «ФИО» вводится фамилия, имя, отчество одной строкой

может вводится все таки правильно, т.е. с пробелами?
а ваш пример "иВАНОВиВАНсЕРГЕИЧ" - это ваш домысел?
вы бы уточнили у постановщика задачи...

а в нашей типовой бухгалтерии делается так:
Процедура НаименованиеПриИзменении(Элемент)

   ФИО = Наименование;

   Если ПустаяСтрока(Фамилия) ИЛИ ЭтоНовый() Тогда
      Фамилия  = ОбщегоНазначения.ВыделитьСлово(ФИО, 1);
      Имя      = ОбщегоНазначения.ВыделитьСлово(ФИО, 2);
      Отчество = ОбщегоНазначения.ВыделитьСлово(ФИО, 3);
      
      Если ЗначениеЗаполнено(Отчество) Тогда
         
         Пол = ОбщегоНазначения.УстановитьПол(Отчество)
         
      КонецЕсли;
      
   КонецЕсли;

КонецПроцедуры

// Функция выделяет первое слово в предложении.
//
Функция ВыделитьСлово(ИсходнаяСтрока, СчетчикВызова) Экспорт
   
   Буфер = СокрЛ(ИсходнаяСтрока);
   ПозицияПослПробела = Найти(Буфер, " ");

   Если (ПозицияПослПробела = 0)
       Или (СчетчикВызова >= 3) Тогда
      ИсходнаяСтрока = "";
      Возврат Буфер;
   КонецЕсли;
   
   ВыделенноеСлово = СокрЛП(Лев(Буфер, ПозицияПослПробела));
   ИсходнаяСтрока = Сред(ИсходнаяСтрока, ПозицияПослПробела + 1);
   
   Возврат ВыделенноеСлово;
   
КонецФункции // ВыделитьСлово()
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Игорь1c

Цитата: cska-fanat-kz от 05 дек 2014, 11:17может вводится все таки правильно, т.е. с пробелами?

Да в том то и дело , что если бы с пробелами проблем бы не было .

Цитата: cska-fanat-kz от 05 дек 2014, 11:17а ваш пример "иВАНОВиВАНсЕРГЕИЧ" - это ваш домысел?

Это то как я понял задачу .

cska-fanat-kz

ну так уточните...
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Игорь1c

Цитата: cska-fanat-kz от 05 дек 2014, 11:34ну так уточните...

а что уточнять ? Формулировка точная на 100%

KrivosheevEV

Цитата: Игорь1c от 05 дек 2014, 10:25
Задание - " В поле «ФИО» вводится фамилия, имя, отчество одной строкой. Причем регистр может не соблюдаться (первая буква имени с маленькой буквы, остальные с большой). Требуется «разобрать» ФИО на «Фамилию», «Имя», «Отчество» (и записать в соответствующие реквизиты). При этом нужно «исправить» регистры букв. "

То, что ФИО вводится одной строкой не означает, что нет разделителей. Предельно простая задача слегка усложнена неизвестным регистром слов. Т.е. "иВАНОВ Иван сергеевич" надо преобразовать в "Иванов", "Иван", "Сергеевич". Легкотня.

cska-fanat-kz

Цитата: Игорь1c от 05 дек 2014, 10:25В поле «ФИО» вводится фамилия, имя, отчество одной строкой

и где тут сказано, что вводится без пробелов?
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

KrivosheevEV

Цитата: cska-fanat-kz от 05 дек 2014, 11:50
Цитата: Игорь1c от 05 дек 2014, 10:25В поле «ФИО» вводится фамилия, имя, отчество одной строкой

и где тут сказано, что вводится без пробелов?

На самом деле, очень не трудно понять эту часть задания именно так, как понял ТС. Новичку пока трудно видеть в этой "строке" реквизит с типом "Строка" неограниченной длины.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск