Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
08 Дек 2016, 12:51
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: [Решено] Работа со строками 1С, замена пробелов  (Прочитано 184 раз)

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

Оффлайн AIFrame

  • **
  • Сообщений: 91
  • РЕПУТАЦИЯ: 6
  • КПД: 7%
  • Регистрация: 2015-07-22
  • Сайт: 
  • Профессия: Ученик 1С
Задача: есть некая таблица в excel. В ней товар, которую мы ищем по колонке кода и некий текст, многострочный, который нужно забить в многострочный реквизит Номенклатуры.
Но тут выясняется, что информация в колонке не соответствует желаемому. Заполнявший табличку человек не знал про ALT+ENTER в экселе, поэтому переносы строк в ячейке делал кучей пробелов. Но иногда он их все же ставил.
Казалось бы, заменить сегменты с повторяющимися пробелами на Символы.ПС и дело в шляпе, но не тут-то было.
Формат многострочной записи стандартизирован:
Реквизит: значение Символ.ПС
Реквизит: значение Символ.ПС
и т.д.
А в табличке мы имеем
Реквизит:            значение                  Реквизит: значение Символ.ПС
Реквизит:     значение         Реквизит: значение           Реквизит: значение
И вот эту кашу нужно привести в нормальный вид.
Т.е. если перед кучей пробелов есть : - не переносить строку, а если нету - переносить.

Решил следующей функцией обработки строки:
Функция ОбработатьСтроку(ИсходныйТекст)
Результат = ИсходныйТекст;

ВходящаяСтрока = Результат;
ДлинаСтроки = СтрДлина(ВходящаяСтрока);
КонечнаяСтрока = Строка("");
НуженПС = ЛОЖЬ;   
    БылоДвоеточие = ЛОЖЬ;

Пока ДлинаСтроки > 0 Цикл
ПервыйСимвол = Лев(ВходящаяСтрока, 1);
Если НЕ ПустаяСтрока(ПервыйСимвол) Тогда // это буква
Если ПервыйСимвол = ":" Тогда
БылоДвоеточие = ИСТИНА;
КонецЕсли;

Если НуженПС Тогда
КонечнаяСтрока = КонечнаяСтрока + Символы.ПС + ПервыйСимвол;
НуженПС = ЛОЖЬ;
Иначе
КонечнаяСтрока = КонечнаяСтрока + ПервыйСимвол;
КонецЕсли;

Отступ = 2;
ДлинаСтроки = ДлинаСтроки - 1;
Иначе // это пробел
// Проверим следующие два символа
ПроверкаДальше = Лев(ВходящаяСтрока, 2);
Если ПустаяСтрока(ПроверкаДальше) Тогда
Если БылоДвоеточие Тогда
НуженПС = ЛОЖЬ;
Иначе
НуженПС = ИСТИНА;
КонецЕсли;
КонецЕсли;
БылоДвоеточие = ЛОЖЬ;
КонечнаяСтрока = КонечнаяСтрока + " ";
Если ПервыйСимвол = Символы.ПС Тогда
КонечнаяСтрока = КонечнаяСтрока + ПервыйСимвол;
КонецЕсли;
ВходящаяСтрока = СокрЛ(ВходящаяСтрока);

ДлинаСтроки = СтрДлина(ВходящаяСтрока);
Отступ = 1;
КонецЕсли;
           
Если ДлинаСтроки > 1 тогда
ВходящаяСтрока = Сред(ВходящаяСтрока, Отступ, ДлинаСтроки);
Иначе
КонечнаяСтрока = КонечнаяСтрока + Сред(ВходящаяСтрока, Отступ, 1);
ДлинаСтроки = 0;
КонецЕсли;
КонецЦикла;

Результат = СтрЗаменить(КонечнаяСтрока, "  ", " ");



Возврат Результат;
КонецФункции
Часа три пыхтел, не мог сформулировать в голове логику, по которой оно должно происходить.
Может время кому сэкономлю.

Смотрите бесплатно более 300 видеоуроков по работе в 1С:Бухгалтерия 8 и 1C:ЗУП 8 ред. 3.0

СМОТРЕТЬ >>


 


* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

MuI_I_Ika MuI_I_Ika
80 Сообщений
cska-fanat-kz cska-fanat-kz
70 Сообщений
Kironten
52 Сообщений
alex0402
47 Сообщений
alexandr_ll
34 Сообщений
LexaK
34 Сообщений
djkeysi
24 Сообщений
Андрей1966
24 Сообщений
sertak sertak
23 Сообщений
BuhRust
22 Сообщений

* Кто онлайн

  • Точка Гостей: 791
  • Точка Скрытых: 0
  • Точка Пользователей: 15
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 

Dellos Catering - выездной ресторан кейтеринг по всему Миру
SimplePortal 2.3.5 © 2008-2012, SimplePortal