Я транслирую 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
Papaparse «Обнаружены и переименованы повторяющиеся заголовки» без повторяющихся заголовков ⇐ Javascript
Форум по Javascript
1770036580
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"
Подробнее здесь: [url]https://stackoverflow.com/questions/79881101/papaparse-duplicate-headers-found-and-renamed-with-no-duplicate-headers[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия