您好:您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
}
};