import fs from 'fs'; import path from 'path'; function convertMarkdownTableToCsv() { const mdPath = path.join(__dirname, '../TASK_LOG.md'); const csvPath = path.join(__dirname, '../TASK_LOG.csv'); if (!fs.existsSync(mdPath)) { console.error('Không tìm thấy file TASK_LOG.md'); return; } const content = fs.readFileSync(mdPath, 'utf-8'); const lines = content.split(/\r?\n/); const csvRows: string[] = []; for (const line of lines) { const trimmed = line.trim(); // Bảng Markdown bắt đầu bằng '|' if (trimmed.startsWith('|')) { // Bỏ qua dòng separator (ví dụ: | :---: | :---: |) if (trimmed.includes('---')) { continue; } // Cắt dòng bằng kí tự '|' const cells = trimmed.split('|'); // split '|' của '| A | B |' sẽ ra ['', ' A ', ' B ', ''] // Bỏ đi phần tử đầu tiên và cuối cùng const dataCells = cells.slice(1, cells.length - 1); // Trim khoảng trắng và format lại từng cell const formattedCells = dataCells.map((cell, index) => { let value = cell.trim(); // Tự động chuyển đổi Status từ ký hiệu Markdown sang chữ thuần Tiếng Việt cho Excel (Cột Status có index là 8) if (index === 8) { if (value.includes('[x]')) { value = 'hoàn thành'; } else if (value.includes('[/]')) { value = 'đang làm'; } else if (value.includes('[ ]')) { value = 'chưa làm'; } } // Escape dấu nháy kép nếu có if (value.includes('"')) { value = value.replace(/"/g, '""'); } // Bao quanh cell bằng dấu nháy kép để tránh lỗi dấu phẩy trong nội dung return `"${value}"`; }); csvRows.push(formattedCells.join(',')); } } fs.writeFileSync(csvPath, '\uFEFF' + csvRows.join('\n'), 'utf-8'); // Thêm BOM để Excel đọc đúng tiếng Việt có dấu console.log(`Đã chuyển đổi thành công sang file: ${csvPath}`); } convertMarkdownTableToCsv();