Пришлось заняться рефакторингом ужасного кода (слава богу, не моего).
Этот код должен был разбирать строку "ФИО:Иванов Иван Иванович;БИК:44423343;Счет:123123123123"
Вот этот код:
Сч = 0;
Пока СтрДлина(стр)>0 цикл
Сч = Сч+1;
Если Сч = 1000 Тогда //Это моя защита от зацикливания...
Предупреждение("Получен неожиданный ответ, попробуйте еще раз: " + стр);
Возврат Неопределено;
КонецЕсли;
поз=Найти(стр,";");
стр1=Лев(стр,поз);
поз1=Найти(стр1,":");
Если Найти(стр1,"Счет")>0 тогда
стрМ.счет=СокрЛП(Сред(стр1,поз1+1,п
ИначеЕсли Найти(стр1,"БИК")>0 тогда
стрМ.бик=СокрЛП(Сред(стр1,поз1+1,п
ИначеЕсли Найти(стр1,"договор")>0 тогда
стрМ.дог=СокрЛП(Сред(стр1,поз1+1,п
ИначеЕсли Найти(стр1,"ФИО")>0 тогда
стрМ.фио=СокрЛП(Сред(стр1,поз1+1,п
КонецЕсли;
стр=Сред(стр,поз+1);
Если стр=")" тогда прервать конецесли; //Это код автора
Конеццикла;
возврат М;
Выход из цикла добавил я, т.к. иногда цикл зацикливался и вешал систему. Мне некогда было разбираться, что делает код и я добавил прерывание. Но потом отправители слегка поменяли формат строки и код не срабатывал уже никогда.
Пришлось проанализировать, что требуется от кода и переписать код по-другому, как говорится, почуствуйте разницу:
стрМ.счет = НайтиСтрокуМежду(стр, "Счет:", ";");
стрМ.бик = НайтиСтрокуМежду(стр, "БИК:", ";");
стрМ.дог = НайтиСтрокуМежду(стр, "договор:", ";");
стрМ.фио = НайтиСтрокуМежду(стр, "ФИО:", ";");
Код, подобный описанному выше, пишут быдлокодеры, которые тратят гору времени на отладку, вместо того, чтобы воспользоваться раз отлаженными функциями.
Journal information