/
Cooolprogrammers
/
web-nodejs-labs
Обзор
Документация
Войти
/
Cooolprogrammers
/
web-nodejs-labs
Код
Запросы
0
Задачи
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
backend/src/services/lab8/task2.service.js
114 строк
3 KB
darkvoid6@mail.ru
ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫ
18 дек 2025, 07:59
18 дек 2025, 07:59
f2c4f06
Код
Авторство
О чём код?
import fs from "fs/promises"; import path from "path"; import { fileURLToPath } from "url"; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const dataDir = path.join(__dirname, "../../../data/lab8/task2/"); const cupFile = path.join(dataDir, "cup.txt"); const groupsJson = path.join(dataDir, "groups.json"); const stadiumJson = path.join(dataDir, "stadium.json"); class Task2Service { async processCupFile() { const raw = await fs.readFile(cupFile, "utf8"); const lines = raw.split("\n").map(l => l.trim()); const groups = {}; const stadiums = {}; let currentGroup = null; // ---------- РЕГУЛЯРКА ПОД ТВОЙ ФОРМАТ ---------- const matchRegex = /^\(\d+\)\s+(\w+)\s+(\w+\/\d+)\s+(\d{2}:\d{2})\s+(.+?)\s+(\d+)-(\d+)\s*\([^)]+\)\s+(.+?)\s+@\s+(.+)$/; for (let line of lines) { // --- Определяем группу --- if (/^Group\s+[A-Z]/.test(line)) { const group = line.split(" ")[1]; currentGroup = group; groups[group] = { group, matches: [] }; continue; } // --- Ищем матч --- const m = line.match(matchRegex); if (m && currentGroup) { const [ _, weekday, dateShort, time, team1, score1, score2, team2, stadiumFull ] = m; // превращаем дату формата "Nov/20" → "2022-11-20" const months = { Jan: "01", Feb: "02", Mar: "03", Apr: "04", May: "05", Jun: "06", Jul: "07", Aug: "08", Sep: "09", Oct: "10", Nov: "11", Dec: "12", }; const [mon, day] = dateShort.split("/"); const date = `2022-${months[mon]}-${day.padStart(2, "0")}`; const stadium = stadiumFull.split(",")[0].trim(); const match = { date, time, team1: team1.trim(), team2: team2.trim(), score1: Number(score1), score2: Number(score2), stadium }; groups[currentGroup].matches.push(match); if (!stadiums[stadium]) { stadiums[stadium] = { stadium, matches: [] }; } stadiums[stadium].matches.push({ group: currentGroup, ...match }); } } await fs.writeFile(groupsJson, JSON.stringify(groups, null, 2), "utf8"); await fs.writeFile(stadiumJson, JSON.stringify(stadiums, null, 2), "utf8"); return { groupsCount: Object.keys(groups).length, stadiumsCount: Object.keys(stadiums).length }; } async getGroups() { try { return JSON.parse(await fs.readFile(groupsJson, "utf8")); } catch { return {}; } } async getStadiums() { try { return JSON.parse(await fs.readFile(stadiumJson, "utf8")); } catch { return {}; } } } export default new Task2Service();