const fs = require('fs'); const path = require('path'); // Счетчики let totalFilesProcessed = 0; let totalChanges = 0; let filesModified = 0; function processJsonFile(filePath) { try { // Читаем файл как текст let content = fs.readFileSync(filePath, 'utf8'); const originalContent = content; const fileName = path.basename(path.dirname(filePath)); console.log(`📁 Обработка: ${fileName}/`); let changesCount = 0; // Список полей-исключений (точно как они записаны в JSON файлах) const exclusionPatterns = [ /"fieldname":\s*"il"[^}]*"fieldtype":\s*"Int"/g, /"fieldname":\s*"v\\u00f6en"[^}]*"fieldtype":\s*"Int"/g, /"fieldname":\s*"mobn\\u00f6mr\\u02591"[^}]*"fieldtype":\s*"Int"/g, /"fieldname":\s*"mobn\\u00f6mr\\u02592"[^}]*"fieldtype":\s*"Int"/g, /"fieldname":\s*"\\u015f\\u0259h\\u0259rn\\u00f6mr\\u0259si1"[^}]*"fieldtype":\s*"Int"/g, /"fieldname":\s*"\\u015f\\u0259h\\u0259rn\\u00f6mr\\u0259si2"[^}]*"fieldtype":\s*"Int"/g, /"fieldname":\s*"\\u0259sasf\\u0259aliyy\\u0259tn\\u00f6v\\u00fcn\\u00fcnkodu"[^}]*"fieldtype":\s*"Int"/g, /"fieldname":\s*"t\\u0259qdimolunmu\\u015f\\u0259lav\\u0259l\\u0259rinsay\\u0131"[^}]*"fieldtype":\s*"Int"/g, /"fieldname":\s*"d\\u0259qiql\\u0259\\u015fdirilmi\\u015fb\\u0259yannam\\u0259nint\\u0259qdimedilm\\u0259sibildiri\\u015finn\\u00f6mr\\u0259si"[^}]*"fieldtype":\s*"Int"/g ]; // Сначала помечаем все исключения временным маркером exclusionPatterns.forEach(pattern => { content = content.replace(pattern, (match) => { // Находим имя поля для логирования const fieldMatch = match.match(/"fieldname":\s*"([^"]+)"/); if (fieldMatch) { console.log(` ⊗ Пропущено: ${fieldMatch[1]}`); } return match.replace('"Int"', '"Int_KEEP"'); }); }); // Теперь заменяем все оставшиеся "fieldtype": "Int" на "fieldtype": "Float" const remainingIntPattern = /"fieldtype":\s*"Int"/g; const matches = content.match(remainingIntPattern); if (matches) { changesCount = matches.length; content = content.replace(remainingIntPattern, '"fieldtype": "Float"'); console.log(` ✓ Изменено полей: ${changesCount}`); } // Возвращаем обратно временные маркеры content = content.replace(/"Int_KEEP"/g, '"Int"'); // Сохраняем если были изменения if (changesCount > 0 && content !== originalContent) { fs.writeFileSync(filePath, content, 'utf8'); console.log(` ✅ Обновлено. Изменений: ${changesCount}\n`); filesModified++; totalChanges += changesCount; } else { console.log(` ℹ️ Изменений не требуется\n`); } totalFilesProcessed++; } catch (error) { console.error(`❌ Ошибка в файле ${filePath}:`, error.message); } } function processAllDoctypes(rootPath) { try { const entries = fs.readdirSync(rootPath, { withFileTypes: true }); entries.forEach(entry => { if (entry.isDirectory()) { const doctypePath = path.join(rootPath, entry.name); const files = fs.readdirSync(doctypePath); const jsonFiles = files.filter(f => f.endsWith('.json')); jsonFiles.forEach(jsonFile => { processJsonFile(path.join(doctypePath, jsonFile)); }); } }); } catch (error) { console.error(`❌ Ошибка при чтении папки:`, error.message); } } // ГЛАВНАЯ ФУНКЦИЯ const doctypePath = 'D:\\taxes_az\\taxes_az\\taxes_az\\doctype'; console.log('========================================'); console.log(' Замена Int → Float'); console.log('========================================'); console.log('Исключения (остаются Int):'); console.log(' • il'); console.log(' • v\\u00f6en (VÖEN)'); console.log(' • mobn\\u00f6mr\\u02591, mobn\\u00f6mr\\u02592'); console.log(' • \\u015f\\u0259h\\u0259rn\\u00f6mr\\u0259si1, \\u015f\\u0259h\\u0259rn\\u00f6mr\\u0259si2'); console.log(' • \\u0259sasf\\u0259aliyy\\u0259tn\\u00f6v\\u00fcn\\u00fcnkodu'); console.log(' • t\\u0259qdimolunmu\\u015f\\u0259lav\\u0259l\\u0259rinsay\\u0131'); console.log(' • d\\u0259qiql\\u0259\\u015fdirilmi\\u015fb\\u0259yannam\\u0259nin...n\\u00f6mr\\u0259si'); console.log('========================================\n'); if (!fs.existsSync(doctypePath)) { console.error('❌ Папка не найдена:', doctypePath); process.exit(1); } processAllDoctypes(doctypePath); console.log('========================================'); console.log('📊 РЕЗУЛЬТАТ:'); console.log(` Файлов проверено: ${totalFilesProcessed}`); console.log(` Файлов изменено: ${filesModified}`); console.log(` Полей изменено: ${totalChanges}`); console.log('========================================'); if (filesModified > 0) { console.log('\n✅ Готово! Все Unicode последовательности сохранены.'); console.log(' Поля-исключения остались с типом Int.'); }