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

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

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

Оффлайн AIFrame

  • ***
  • Сообщений: 101
  • РЕПУТАЦИЯ: 7
  • КПД: 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 авторов за месяц

alex0402
131 Сообщений
Dethmontt Dethmontt
76 Сообщений
Геннадий ОбьГЭС Геннадий ОбьГЭС
69 Сообщений
ilyay ilyay
36 Сообщений
MuI_I_Ika MuI_I_Ika
36 Сообщений
LexaK
32 Сообщений
BuhRust
24 Сообщений
Igmok
23 Сообщений
magnifico61
18 Сообщений
Kironten
17 Сообщений

* Кто онлайн

  • Точка Гостей: 215
  • Точка Скрытых: 0
  • Точка Пользователей: 0

Нет пользователей онлайн.

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

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

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

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

Поиск

 

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