Каталог решений - Алгоритм разбивки длинных фраз и предложений на строчки

Алгоритм разбивки длинных фраз и предложений на строчки

Алгоритм разбивки длинных фраз и предложений на строчки

В наличии

Разработал для ВУЗа, где я работаю, алгоритм разбивки длинных названий специальностей и прочих строковых вещей, для вывода в печатные формы заявлений, личных карточек, дипломов и прочего. Возможно, я не первый, но все ж — мой вариант. Может, кому и пригодится. Прошу прощения, если что не так. Это моя самая первая публикация:)

Категория:

Описание

Сама процедура выглядит так:

Процедура РазбивкаСтроки(СтруктураСтрок, ИсходнаяСтрока)
	Если ИсходнаяСтрока = "" Тогда 
		Для К = 1 По СтруктураСтрок.Количество() Цикл 
			СтрТек = "Строка" + К;
			СтруктураСтрок[СтрТек] = "";
		КонецЦикла;
		Возврат;
	КонецЕсли;
	КоличествоРазбСтрок = СтруктураСтрок.Количество();
	СтрокаРазбивки = ИсходнаяСтрока;
	ДлинаРазрешения = 0;
	НаборСлов = "";
	Для П=1 По КоличествоРазбСтрок Цикл
		Если СтрокаРазбивки = "" Тогда 
			Прервать;
		КонецЕсли;
		СтрТек = "Строка" + П;
		Попытка 
			ДлинаРазрешения = Число(СтруктураСтрок[СтрТек]);
		Исключение
			Сообщить("Неверно указанны параметры для разбивки!", СтатусСообщения.Внимание);
			Возврат;
		КонецПопытки;
		ПервыйПробел = 0;
		Пока СтрДлина(НаборСлов) < ДлинаРазрешения Цикл 
			ПервыйПробел = Найти(СтрокаРазбивки, " ");
			Если ПервыйПробел > ДлинаРазрешения Тогда 
				Прервать;
			КонецЕсли;
			Если ПервыйПробел = 0 И НаборСлов <> "" Тогда 
				НаборСлов = НаборСлов + " " + СокрЛП(СтрокаРазбивки);
				СтруктураСтрок[СтрТек] = НаборСлов;
				СтрокаРазбивки = "";
				Прервать;
			КонецЕсли;
			НаборСлов = НаборСлов + " " + СокрЛП(Лев(СтрокаРазбивки, ПервыйПробел));
			Если СтрДлина(НаборСлов) > ДлинаРазрешения ИЛИ СтрДлина(СокрЛП(СтрокаРазбивки)) = 0 Тогда 
				СтруктураСтрок[СтрТек] = НаборСлов;
				НаборСлов = "";
				СтрокаРазбивки = СокрЛП(СтрЗаменить(СтрокаРазбивки, Лев(СтрокаРазбивки, ПервыйПробел), ""));
				Прервать;
			КонецЕсли;
			СтрокаРазбивки = СокрЛП(СтрЗаменить(СтрокаРазбивки, Лев(СтрокаРазбивки, ПервыйПробел), ""));
		КонецЦикла;
	КонецЦикла;
	Для Т=1 По КоличествоРазбСтрок Цикл
		СтрТек = "Строка" + Т;
		Попытка 
			ЕстьЧис = Число(СтруктураСтрок[СтрТек]);
			Если ЕстьЧис Тогда 
				СтруктураСтрок[СтрТек] = "";
			КонецЕсли;
		Исключение
		КонецПопытки;
	КонецЦикла;
КонецПроцедуры

Параметры: [СтруктураСтрок] Тип Структура, где ключ это имя строки для разбивки, а значение это количество символов предела вхождения строки во вставляемое поле в виде строки. Пример для разбивки на 2 строки с разным местом размещения:

СтруктураСтроки = Структура Новый Структура;
СтруктураСтроки.Вставить("Строка1", "30");
СтруктураСтроки.Вставить("Строка2", "100");

Для разбивки на три строки:

СтруктураСтроки = Структура Новый Структура;
СтруктураСтроки.Вставить("Строка1", "30");
СтруктураСтроки.Вставить("Строка2", "100");
СтруктураСтроки.Вставить("Строка2", "80");

И так далее. Второй параметр: [ИсходнаяСтрока] Тип строка. Собственно сама строка которую надо разбить. После прохождения процедуры СтруктураСтрок формирует значение для каждого ключа соответсвенно «Строка1», «Строка2″…. «СтрокаN». Значение в каждом ключе это кусок разбитого предложения.

А вот и сам пример работы алгоритма:

Есть печатная форма, заявления например, где в четко установленной форме надо разбить название специальности.

Само название специальности : «230105.65 Программное обеспечение вычислительной техники и автоматизированных систем»

Ее нам и нужно уместить в заявлении на 2-х строчках.

Тут 2 параметра и в каждый из них соответсвенно требуется вставить разбитое название. Перед помещением в параметры значение мы получаем сначало разбивку таким образом.

СтруктураСтрок = Новый Структура;
СтруктураСтрок.Вставить("Строка1", "25");
СтруктураСтрок.Вставить("Строка2", "80");

Далее получаем искомую строку для разбивки и отправляем в «процедурную» 🙂

СтрокаРазбивки = Специальность.Наименование;
РазбивкаСтроки(СтруктураСтрок, СтрокаРазбивки);

После обработки получаем измененную структуру где для каждого ключа уже есть часть предложения.

Вот их и вставляем в наши параметры.

ОбластьПечати.Параметры.СтрокаСпециальности1 = СтруктураСтрок.Строка1;
ОбластьПечати.Параметры.СтрокаСпециальности2 = СтруктураСтрок.Строка2;

На выходе имеем такое:

 

Собственно вариантов разбивки длинных фраз и предложений для переноса в печатных формы довольно много. Есть еще 1 способ разбивки, придуманной тоже мной, для случаев когда заранее неизвестно сколько строк может получится. То есть бить строку до бесконечности пока не кончатся символы 🙂 Чуть позже я ее опубликую.

has been added to your cart:
Оформление заказа