Напиши скрипт на JS для разбора текстового файла н...
Erstellt am: 23. März 2026
Beantwortet mit GPT-5.4 Thinking von Chat01
Erstellt am: 23. März 2026
Beantwortet mit GPT-5.4 Thinking von Chat01
Напиши скрипт на JS для разбора текстового файла на файлы функций и процедур /(?:^|\n)(?:[ \t]?//.\n)?(?:(?:[ \t]?&.\n)(?:[ \t]?(?://.)??\n))??[ \t]?(?:Асинх\s?|Async\s*?)??[ \t]?(Процедура|Функция|Procedure|Function)\s(?:[ \t]?(?://.)??\n)[ \t]?([А-Яа-яA-Za-z_][А-Яа-я\w])(?:[ \t]?(?://.)??\n)[ \t]?([\s\S]?\n[ \t]?(?:КонецПроцедуры|КонецФункции|EndProcedure|EndFunction).\n?(?:(?:[ \t]?//.\n)(?=(?:[ \t]?\n)|(?:\s$)))/ig
Вот готовый Node.js-скрипт. Он читает текстовый файл, находит все процедуры/функции по твоему regex и раскладывает их в отдельные файлы по имени метода.
jsconst fs = require("fs"); const path = require("path"); const INPUT_FILE = process.argv[2]; const OUTPUT_DIR = process.argv[3] || "./out"; if (!INPUT_FILE) { console.error("Использование: node split.js <input-file> [output-dir]"); process.exit(1); } const pattern = /(?:^|\n)(?:[ \t]*?\/\/.*\n)*?(?:(?:[ \t]*?&.*\n)(?:[ \t]*?(?:\/\/.*)??\n)*)??[ \t]*?(?:Асинх\s*?|Async\s*?)??[ \t]*?(Процедура|Функция|Procedure|Function)\s(?:[ \t]*?(?:\/\/.*)??\n)*[ \t]*?([А-Яа-яA-Za-z_][А-Яа-я\w]*)(?:[ \t]*?(?:\/\/.*)??\n)*[ \t]*?\([\s\S]*?\n[ \t]*?(?:КонецПроцедуры|КонецФункции|EndProcedure|EndFunction).*\n?(?:(?:[ \t]*?\/\/.*\n)*(?=(?:[ \t]*?\n)|(?:\s*$)))/ig; function sanitizeFileName(name) { return name.replace(/[<>:"/\\|?*\x00-\x1F]/g, "_"); } function getUniqueFilePath(dir, baseName, ext = ".bsl") { let filePath = path.join(dir, `${baseName}${ext}`); let counter = 1; while (fs.existsSync(filePath)) { filePath = path.join(dir, `${baseName}_${counter}${ext}`); counter++; } return filePath; } function main() { const text = fs.readFileSync(INPUT_FILE, "utf8"); fs.mkdirSync(OUTPUT_DIR, { recursive: true }); let match; let count = 0; while ((match = pattern.exec(text)) !== null) { const fullBlock = match[0].replace(/^\n/, ""); const methodType = match[1]; const methodName = match[2]; const safeName = sanitizeFileName(methodName); const outFile = getUniqueFilePath(OUTPUT_DIR, safeName, ".bsl"); fs.writeFileSync(outFile, fullBlock, "utf8"); count++; console.log(`Сохранено: ${outFile} [${methodType} ${methodName}]`); } console.log(`Готово. Найдено элементов: ${count}`); } main();
Как запускать:
bashnode split.js source.txt ./result
Что делает:
source.txtПроцедура / Функция / Procedure / FunctionИмяМетода.bslЕсли хочешь, могу сразу дать версию, которая:
json,fs/promises и ES modules.