Papaparse «Обнаружены и переименованы повторяющиеся заголовки» без повторяющихся заголовковJavascript

Форум по Javascript
Ответить
Anonymous
 Papaparse «Обнаружены и переименованы повторяющиеся заголовки» без повторяющихся заголовков

Сообщение Anonymous »

Я транслирую CSV-файл с помощью работника, но получаю это предупреждение: «Дубликаты заголовков найдены и переименованы»., даже если в CSV-файле нет повторяющихся ключей заголовков.
CSV:
CHIAVE|COD_DITTA|COD_ARTICOLO|COD_DEPOSITO|DESC_DEPOSITO|GIACENZA|DISPONIBILITA|UM1|DAT_ULT_MOD
4CED3697-STEBE-4254-9DB9-8D233096D796#DEXXXX0036#00|1|DEXXXX0036|00|Deposito 00|0,000|0,000|CT|01011900000000

Если я удалю строки и оставлю только заголовок, я не получу предупреждения, но анализатор должен просматривать только первую строку файла, поэтому я не понимаю, почему он говорит, что есть повторяющиеся заголовки. Также он указывает «0,000», которое находится в строках, но нет разделителя, который мог бы испортить синтаксический анализ. И все равно это подряд, а не заголовок.
мой скрипт:
export async function importToDatabase(tableName, databaseId) {
console.log(`...Importing: ${tableName}`);

const connection = await pool.getConnection();

try {
const filePath = path.resolve(`data/${databaseId}/dat_files/io_${tableName}.dat`);

// Fetch table columns
const [columnsResult] = await connection.query(
`SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = ?
AND TABLE_SCHEMA = DATABASE()`,
[tableName],
);

const tableColumns = columnsResult.map((r) => r.COLUMN_NAME);

if (!tableColumns.length) throw new Error('No columns found in database table');

const validColumns = tableColumns.map((c) => c.trim().toLowerCase());

// HARD SYNC: remove existing rows for this database
await connection.beginTransaction();
await connection.query(`DELETE FROM ${tableName} WHERE database_id = ?`, [databaseId]);
await connection.commit();

// Prepare for batch insert
const BATCH_SIZE = 500;
let batch = [];
let totalRows = 0;

await connection.beginTransaction();

const stream = fs.createReadStream(filePath, { encoding: 'utf8' });

await new Promise((resolve, reject) => {
Papa.parse(stream, {
header: true,
delimiter: '|',
quoteChar: '',
skipEmptyLines: true,
worker: true,
transform: (value) => value?.trim(),

step: async (results, parser) => {
const row = results.data;

// Normalize keys
const normalizedRow = {};
for (const key in row) normalizedRow[key.trim().toLowerCase()] = row[key];

normalizedRow['database_id'] = databaseId;

// Filter only valid columns
const filteredRow = {};
for (const col of validColumns) filteredRow[col] = normalizedRow[col] ?? null;

// Skip rows missing mandatory column
if (!filteredRow.chiave) return;

batch.push(filteredRow);

if (batch.length >= BATCH_SIZE) {
parser.pause();
const placeholders = batch
.map(() => `(${validColumns.map(() => '?').join(',')})`)
.join(',');
const values = batch.flatMap((r) =>
validColumns.map((col) => r[col]?.toString().trim() ?? null),
);

try {
await connection.query(
`INSERT INTO ${tableName} (${validColumns.join(',')}) VALUES ${placeholders}`,
values,
);
totalRows += batch.length;
batch = [];
parser.resume();
} catch (err) {
parser.abort();
reject(err);
}
}
},

complete: async (results) => {
try {
// Insert remaining batch
if (batch.length) {
const placeholders = batch
.map(() => `(${validColumns.map(() => '?').join(',')})`)
.join(',');
const values = batch.flatMap((r) =>
validColumns.map((col) => r[col]?.toString().trim() ?? null),
);
await connection.query(
`INSERT INTO ${tableName} (${validColumns.join(',')}) VALUES ${placeholders}`,
values,
);
totalRows += batch.length;
}

await connection.commit();

// Only log real duplicates
if (results.meta?.renamedHeaders?.length) {
console.warn(`Actual duplicate headers renamed:`, results.meta.renamedHeaders);
}

console.log(`SUCCESS: io_${tableName}.dat (${totalRows} rows)`);
resolve();
} catch (err) {
await connection.rollback();
reject(err);
}
},

error: async (err) => {
await connection.rollback();
reject(err);
},
});
});
} catch (error) {
await connection.rollback();

if (error.code === 'ENOENT') {
console.error(`ERROR: io_${tableName}.dat not found`);
} else {
console.error(`ERROR: io_${tableName}.dat`, error);
}
} finally {
connection.release();
}
}

В журнале консоли:
...Importing: art_stock
Duplicate headers found and renamed.
Duplicate header found: "0,000"


Подробнее здесь: https://stackoverflow.com/questions/798 ... te-headers
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»