您好:您csv好像处理crlf(\r和\n,webpack后的line299)有点儿问题导致我但凡在linux上编辑csv(使用\n)就会导致大面积字串undefined。 考虑到反正您也用webpack了,有考虑直接import个现成csv parser库替代手动解析来防止这种问题吗?
Viewing post in RMMZ- Multilingual - Chimaki_Lang.js comments
搓完了:
class CsvManager { static #parseCsv(text) { const rows = [] let row = [] let field = '' let insideQuotes = false let i = 0 while (i < text.length) { const char = text[i] const next = text[i + 1] if (insideQuotes) { if (char === '"') { if (next === '"') { field += '"' i++ } else { insideQuotes = false } } else { field += char } } else { if (char === '"') { insideQuotes = true } else if (char === ',') { row.push(field) field = '' } else if (char === '\n') { row.push(field) rows.push(row) row = [] field = '' } else if (char === '\r') { // skip or normalize \r\n if (next === '\n') { i++ } row.push(field) rows.push(row) row = [] field = '' } else { field += char } } i++ } if (field !== '' || insideQuotes || row.length > 0) { row.push(field) rows.push(row) } return rows } static async parseLang(fileName) { let translations = {}; LANG_LIST.forEach((langCode => {translations[`${langCode}`] = {}})); let colIndex = {}; LANG_LIST.forEach(((langCode, idx) => {colIndex[`${langCode}`] = idx + 2})); const fs = require("fs"); const str = await fs.promises.readFile(`./csv/${fileName}.csv`, "utf8"); const csv = CsvManager.#parseCsv(str) for (const line of csv) { const id = line[0]; for (const langCode in colIndex) { let cell = line[colIndex[langCode]].replaceAll(/\r\n|\r|\n/g, "\n"); translations[langCode][id] = cell } } return translations } };