Подсчет числа строк с кодом, с комментариями (и т.п.) в конфигурации

26.01.20

Разработка - Механизмы платформы 1С

Если вам требуется для вашей конфигурации по-быстрому подсчитать количество строк с кодом, количество строк с объявлением процедур и функций, количество строк с комментариями и т.п., то вы можете использовать предлагаемый код. Надеюсь, кому-нибудь пригодится. Тестировалось на платформе 1С:Предприятие 8.3 (8.3.12.1567) на обычных формах.

Для презентации мне потребовалось подсчитать количество используемых в конфигурации объявлений процедур и функций, количество строк с кодом. Прям точные значения мне не требовались. Главное было отразить тенденции роста и т.п.

Для подсчета вы можете сделать обработку (как я, либо воспользоваться любой консолью кода). Я свою обработку не выкладываю, т.к. код очень прост и любой разберётся в нём.

Итак, приступаем. Всё чрезвычайно просто. 

Первое, с чего нужно начать - в режиме конфигуратора выгрузить конфигурацию в файлы в какой-нибудь каталог. См. Рис.1.

Второе - читаем все файлы "*.bsl" из этого каталога в массив. В этих (кодовых) файлах и лежит текст программ.

Третье - последовательно построчно читаем файлики с предыдущего шага и считаем, что там нам нужно.

Четвертое - просто выводим результат.

 

Процедура КнопкаВыполнитьНажатие(Кнопка)
	
	МассивФайлов = НайтиФайлы(КаталогСФайлами, "*.bsl", Истина);
	
	МойРезультат = Новый Структура;
	МойРезультат.Вставить("СчКодовыхФайлов", 0);
	МойРезультат.Вставить("СчОбъявленийПроцедурФункций", 0);
	МойРезультат.Вставить("СчКомментариев", 0);
	МойРезультат.Вставить("СчСтрокКода", 0);
	МойРезультат.Вставить("СчПустыхСтрок", 0);
	МойРезультат.Вставить("СчВсегоСтрок", 0);

	Для Каждого Файл Из МассивФайлов Цикл
		ПросчитатьФайл(Файл.ПолноеИмя, МойРезультат);
	КонецЦикла;
	
	
	Для Каждого Показатель Из МойРезультат Цикл
		Сообщить(Показатель.Ключ + ": " + Формат(Показатель.Значение, "ЧН=0; ЧГ=0"));	
	КонецЦикла;	

КонецПроцедуры

Процедура ПросчитатьФайл(ПолноеИмяФайла, МойРезультат)
	
	МойРезультат["СчКодовыхФайлов"] = МойРезультат["СчКодовыхФайлов"] + 1; 	
		
	Текст = Новый ЧтениеТекста(ПолноеИмяФайла, КодировкаТекста.ANSI);
	Стр = Текст.ПрочитатьСтроку();
	Пока Стр <> Неопределено Цикл // строки читаются до символа перевода строки
		ПросчитатьСтроку(Стр, МойРезультат);
		Стр = Текст.ПрочитатьСтроку();
	КонецЦикла;
	
КонецПроцедуры	

Процедура ПросчитатьСтроку(Стр, МойРезультат)
	
	МойРезультат["СчВсегоСтрок"] = МойРезультат["СчВсегоСтрок"] + 1;	
	
	ТекСтрока = СокрЛП(Стр);
	Если ТекСтрока = "" Тогда
		МойРезультат["СчПустыхСтрок"] = МойРезультат["СчПустыхСтрок"] + 1;
	Иначе
		НачСтроки =  Лев(СокрЛП(Стр), 2);
		Если НачСтроки = "//" Тогда
			МойРезультат["СчКомментариев"] = МойРезультат["СчКомментариев"] + 1;
		ИначеЕсли ВРег(НачСтроки) = "ФУ" ИЛИ ВРег(НачСтроки) = "ПР" Тогда
			МойРезультат["СчОбъявленийПроцедурФункций"] = МойРезультат["СчОбъявленийПроцедурФункций"] + 1;
		Иначе
			МойРезультат["СчСтрокКода"] = МойРезультат["СчСтрокКода"] + 1;	
		КонецЕсли;	
	КонецЕсли;	
	
КонецПроцедуры	

 

На выходе программы получим результат:

 

Подсчет строк статистика

См. также

Сервисы интеграции без Шины и интеграции

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пример использования «Сервисов интеграции» без подключения к Шине и без обменов.

13.03.2024    3208    dsdred    16    

65

Как готовить и есть массивы

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Все мы используем массивы в своем коде. Это один из первых объектов, который дают ученикам при прохождении обучения программированию. Но умеем ли мы ими пользоваться? В этой статье я хочу показать все методы массива, а также некоторые фишки в работе с массивами.

24.01.2024    7488    YA_418728146    25    

69

Планы обмена VS История данных

Перенос данных 1C Механизмы платформы 1С Системный администратор Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    7729    dsdred    36    

115

1С-ная магия

Механизмы платформы 1С Программист Бесплатно (free)

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    20096    SeiOkami    46    

124

Дефрагментация и реиндексация после перехода на платформу 8.3.22

Механизмы платформы 1С Системный администратор Платформа 1С v8.3 Бесплатно (free)

Начиная с версии платформы 8.3.22 1С снимает стандартные блокировки БД на уровне страниц. Делаем рабочий скрипт, как раньше.

14.09.2023    14027    human_new    27    

77

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    10385    YA_418728146    7    

148

Внешние компоненты Native API на языке Rust - Просто!

Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Внешние компоненты для 1С можно разработывать очень просто, пользуясь всеми преимуществами языка Rust - от безопасности и кроссплатформенности до удобного менеджера библиотек.

20.08.2023    7004    sebekerga    54    

99
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Nikola23 698 26.01.20 10:14 Сейчас в теме
Эта штука не считает строки в которых комментарий после кода.
Многострочный комментарий, вероятно, надо считать как 1, а не как много. Но это зависит от задачи.

А вообще, вопрос главный, почему к полю структуры обращаетесь через

-- структура["Ключ"]

вместо

-- структура.Ключ
?
2. Идальго 229 26.01.20 10:17 Сейчас в теме
(1) Да, не считает. Это не для точного подсчета, а лишь для приблизительного. Вы вольны переделать как вам угодно.
А по поводу главного вопроса - да не знаю, вроде это допустимо)))
3. Nikola23 698 26.01.20 21:27 Сейчас в теме
(2) Допустимо, не спорю.
А зачем? С практической точки - это дает что-то? Я засомневался. Вдруг я чего-то не знаю.
Куча символов и переключение клавиатуры.
4. Идальго 229 26.01.20 21:35 Сейчас в теме
(3) Я привык так. Оно же имена ключей другим цветом делает и мне привычнее писать и читать именно так. Думаю что и нет больше ничего с практической точки зрения.
5. Ndochp 103 28.01.20 10:56 Сейчас в теме
(1) Не автор, но:
1. Единообразная работа со структурами и соответствиями
2. Единообразная работа при динамическом формировании имени ключа
6. Senator_I 175 28.01.20 16:51 Сейчас в теме
Спасибо, пригодилась обработка.
7. DWZ2 28.01.20 22:11 Сейчас в теме
ИначеЕсли ВРег(НачСтроки) = "ФУ" ИЛИ ВРег(НачСтроки) = "ПР" Тогда


А если процедура или функция не с начала строки будут?

И как насчёт переменных с именами на "Фу" или "Пр"? (если вдруг человек без отступов пишет)
8. Идальго 229 29.01.20 00:03 Сейчас в теме
(7) Ну там же есть код, из которого совершенно ясно что будет. Кроме того, вы можете запустить код и проверить))) Можете даже переделать парсинг под себя.
Повторюсь, это не супер точный подчет (хотя для прикидки вполне годится) и кроме того, обычно, в одной строке делают не больше одного объявления, которое после СокрЛП() попадет под приведенное условие.
9. DWZ2 29.01.20 09:55 Сейчас в теме
(8)
Ну там же есть код, из которого совершенно ясно что будет. Кроме того, вы можете запустить код и проверить)))


Вопрос риторический.


(8)
Можете даже переделать парсинг под себя.


Мне-то зачем? Я, хвала Всевышнему, пока ещё способен написать подобную программу с нуля. Просто, по крайней мере раньше, было принято выкладывать программы "под ключ".

(8)
в одной строке делают не больше одного объявления


Ох, напишет какой-нибудь умник код в одну строчку, как некоторые на JavaScript, тогда ";" считать и парсить придётся.
14. DrAku1a 1725 06.02.20 17:52 Сейчас в теме
(7)Верно подмечено.
ИначеЕсли ВРег(НачСтроки) = "ФУ" и ВРег(Лев(СтрЗаменить(СокрЛП(Стр), Символы.Таб, " "), 8))="ФУНКЦИЯ " Тогда
МойРезультат["СчОбъявленийПроцедурФункций"] = МойРезультат["СчОбъявленийПроцедурФункций"] + 1;
и аналогично для процедур... т.к. 1С выполняет проверку второй части условия только при истинности первой части - то второе условие не будет проверяться на каждой строке текста.
10. ico 31.01.20 08:26 Сейчас в теме
Скажите, а какое практическое применение могут получить данные подсчеты комментариев и некомментариев?
Это для какого-то особенного начисления ЗП кодеру или для чего-то более привлекательного?
11. Идальго 229 31.01.20 09:16 Сейчас в теме
(10) Ахха нет, я думаю, что считать ЗП кодерам по количеству строк это какая-то сказочная дикость. Но, может кто-то именно так и делает))) Моё мнение, что количество строк кода д.б. наоборот минимальным, но не в ущерб ясности и производительности.

Количество или доля строк с комментариями может характеризовать качество кода. Многие считают, что "хороший" код должен не иметь комментарив вообще, или иметь только минимальное их количество (т.к. "хороший код д.б. ясным и без комментариев"). Примерно тоже самое со строками объявлений процедур и функций - можно рассчитать сколько в среднем в них кодовых строк. Многиими считается, что кодовых строк в них не д.б. очень много, дабы читалось удобно.
Вот таких вот "практических" оценок чистоты кода можно много придумать)))

Я же использовал этот подсчет строк для презентации, в которой показывал темпы роста кодовой базы в одном из своих проектов.
12. lmnlmn 69 31.01.20 09:24 Сейчас в теме
(11) Для автоматизированного управления качеством кода уже давно есть системы которые этот код не считают а анализируют. На Инфостарте есть публикации по SonarCube в частности. Хотя, да, я сам люблю смотреть на меняющиеся в интересную для меня сторону циферки))
13. Идальго 229 31.01.20 09:58 Сейчас в теме
15. DWZ2 07.02.20 10:35 Сейчас в теме
(11)
Ахха нет, я думаю, что считать ЗП кодерам по количеству строк это какая-то сказочная дикость. Но, может кто-то именно так и делает)))


Был случай, когда программистам начисляли зарплату наравне с чертёжниками, то есть по числу листов формата А4 с кодом.
Оставьте свое сообщение