Files
2026-07-18 12:17:10 +07:00

64 lines
2.1 KiB
TypeScript

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();