From e951a4206ea1d956f311660695bdfc1a31fa8469 Mon Sep 17 00:00:00 2001 From: host Date: Thu, 30 Jul 2026 17:19:10 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D1=84=D0=B0=D0=B9=D0=BB=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils.js | 78 ---------------------------------------------------- 1 file changed, 78 deletions(-) delete mode 100644 src/utils.js diff --git a/src/utils.js b/src/utils.js deleted file mode 100644 index ccf428a..0000000 --- a/src/utils.js +++ /dev/null @@ -1,78 +0,0 @@ -// utils.js -// Вспомогательные функции для работы с Excel, валидации и нормализации данных - -/** - * Читает файл Excel и возвращает массив листов. - * @param {File} file - * @returns {Promise>}>>} - */ -export async function readExcel(file) { - const data = await file.arrayBuffer(); - const wb = XLSX.read(data, { type: 'array' }); - return wb.SheetNames.map(name => ({ - name, - data: XLSX.utils.sheet_to_json(wb.Sheets[name], { header: 1, defval: '' }) - })); -} - -/** - * Проверка типа и размера файла. - * @param {File} file - * @returns {boolean} - */ -export function validateFile(file) { - const ext = file.name.slice(file.name.lastIndexOf('.')).toLowerCase(); - if (!['.xlsx', '.xls'].includes(ext)) { - alert(`Недопустимый тип файла: ${ext}`); - return false; - } - if (file.size === 0) { - alert('Файл пустой'); - return false; - } - return true; -} - -/** - * Нормализация номера ТС (замена латинских букв их русскими аналогами). - * @param {string} plate - * @returns {string} - */ -export function normalizePlate(plate) { - const map = {A:'\u0410',B:'\u0412',C:'\u0421',E:'\u0415',H:'\u041D',K:'\u041A',M:'\u041C',O:'\u041E',P:'\u0420',T:'\u0422',X:'\u0425',Y:'\u0423'}; - return plate.toUpperCase().replace(/[ABCEHKMOPTXY]/g, ch => map[ch] || ch); -} - -/** - * Приведение ФИО к единому регистру, замена Ё на Е. - * @param {string} name - * @returns {string} - */ -export function normalizeName(name) { - return name.toUpperCase().replace(/\u0401/g, '\u0415').trim(); -} - -/** - * Вычисление схожести строк (Levenshtein). - * @param {string} a - * @param {string} b - * @returns {number} коэффициент от 0 до 1 - */ -export function similarity(a, b) { - if (!a || !b) return 0; - const editDist = (s1, s2) => { - const dp = Array(s1.length + 1).fill().map(() => Array(s2.length + 1).fill(0)); - for (let i = 0; i <= s1.length; i++) dp[i][0] = i; - for (let j = 0; j <= s2.length; j++) dp[0][j] = j; - for (let i = 1; i <= s1.length; i++) { - for (let j = 1; j <= s2.length; j++) { - dp[i][j] = s1[i - 1] === s2[j - 1] - ? dp[i - 1][j - 1] - : Math.min(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]) + 1; - } - } - return dp[s1.length][s2.length]; - }; - const dist = editDist(a, b); - return 1 - dist / Math.max(a.length, b.length); -}