import * as fs from 'fs';
|
import xlsx from "node-xlsx";
|
|
const books = [];
|
|
function parseBooks() {
|
try {
|
|
// 获取所有日志文件
|
const logFiles = fs.readdirSync('./book-isbn-logs', { withFileTypes: true });
|
// 遍历日志文件
|
for (const file of logFiles) {
|
// 读取日志文件
|
const log = fs.readFileSync(`./book-isbn-logs/${file.name}`, 'utf8');
|
// 解析日志文件
|
const bookLogs = log.split('开始下载');
|
for (const bookLog of bookLogs) {
|
const lines = bookLog.split('\n');
|
// 遍历日志行
|
for (const line of lines) {
|
// 解析日志行
|
let reg, group;
|
reg = /.* ISBN: (.*)$/g;
|
group = reg.exec(line);
|
if (group) {
|
const book = {};
|
const text = group[1];
|
const obj = JSON.parse(text);
|
Object.assign(book, obj);
|
books.push(book);
|
continue;
|
}
|
}
|
|
}
|
}
|
|
} catch (e) {
|
console.error(e);
|
} finally {
|
const EXCEL_FILE = "fiction-noisbn.xlsx";
|
const workSheets = xlsx.parse(EXCEL_FILE);
|
const sheet = workSheets[0];
|
const result = [books[0]];
|
for (const book of books) {
|
const row = sheet.data.find(row => row[0] == book.id);
|
row[5] = book.isbn;
|
result.push(row);
|
}
|
const buffer = xlsx.build([{ name: "Sheet1", data: result }]);
|
fs.writeFileSync("archive-books.xlsx", buffer, (err) => { });
|
console.log("保存完成: ", EXCEL_FILE);
|
}
|
}
|
|
function parseArchiveBooks() {
|
const logText = fs.readFileSync(`./book-list-logs/book-list-logs.log`, 'utf8');
|
const logs = logText.split('\n');
|
for (const log of logs) {
|
if (log.includes('|')) {
|
const [id, title, author] = log.split(" | ");
|
const book = { id, title, author };
|
books.push(book);
|
}
|
}
|
const result = [["id", "title", "author"]];
|
for (const book of books) {
|
result.push([book.id.substr(19), book.title, book.author]);
|
}
|
const buffer = xlsx.build([{ name: "Sheet1", data: result }]);
|
fs.writeFileSync("archive-books.xlsx", buffer, (err) => { });
|
console.log("保存完成:" + books.length);
|
|
}
|
parseArchiveBooks();
|
// parseBooks();
|