forked from UKSOURCE/ipv6
64 lines
2.1 KiB
TypeScript
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();
|