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

[Решено] Работа со строками 1С, замена пробелов

Автор AIFrame, 23 сен 2016, 10:51

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

AIFrame

Задача: есть некая таблица в excel. В ней товар, которую мы ищем по колонке кода и некий текст, многострочный, который нужно забить в многострочный реквизит Номенклатуры.
Но тут выясняется, что информация в колонке не соответствует желаемому. Заполнявший табличку человек не знал про ALT+ENTER в экселе, поэтому переносы строк в ячейке делал кучей пробелов. Но иногда он их все же ставил.
Казалось бы, заменить сегменты с повторяющимися пробелами на Символы.ПС и дело в шляпе, но не тут-то было.
Формат многострочной записи стандартизирован:
Реквизит: значение Символ.ПС
Реквизит: значение Символ.ПС
и т.д.

А в табличке мы имеем
Реквизит:            значение                  Реквизит: значение Символ.ПС
Реквизит:     значение         Реквизит: значение           Реквизит: значение

И вот эту кашу нужно привести в нормальный вид.
Т.е. если перед кучей пробелов есть : - не переносить строку, а если нету - переносить.

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

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

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

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

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

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

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



Возврат Результат;
КонецФункции

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

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

Рейтинг@Mail.ru

Поиск