Добавить заголовки в CSV и вернуть строку с соответствующей строкой в Node.js
Я пытаюсь вернуть значение строки в соответствующей строке.
Я начинаю с CSV, который не имеет подробности заголовка. После загрузки CSV в память, я думаю, что мне нужно сначала добавить заголовки, а затем преобразовать данные в JSON, а затем перебрать данные, чтобы найти правильный объект в массиве.
Я использовал highland для создания потока чтения и вывода на объекты. Однако символы разрыва строки \r
а также \r\n
не анализируются и вводятся в строки значений.
Этот подход также, кажется, не анализирует весь файл, он выводит 3 строки.
highland(fs.createReadStream('example.csv', 'utf8'))
.map(line => line.split(','))
.map(parts => ({
a: parts[0],
b: parts[1],
c: parts[2]
}))
.each(x => console.log(x))
Было бы неплохо структурировать CSV как JSON, а затем использовать .filter()
метод, чтобы соответствовать записи.
Фактический вывод более 1000 строк
{ a: '', b: 'CD53110' }
{ a: '\nRD40115', b: 'CD40315' }
{ a: '', b: '63\r\nRE15468' }
{ a: '96798', b: '5\r\nRR60899' }
Пример входного фрагмента
,CD510,13
,T9069,65
RCM22,TC633,101
RC023,87693,16
M2024,T7636,109
Примечание: первые несколько строк содержат только столбцы "b" и "c".
1 ответ
Вы можете записать заголовки в виде строки, установить CSV в память и объединить их.
Затем с csvtojson
модуль вы можете отобразить csv
в json
и использовать встроенную функцию фильтра, чтобы вернуть соответствующую строку.
const fs = require('fs')
const csv = require('csvtojson')
let headers = 'a,b,c\n'
let file = fs.readFileSync(__dirname + 'example.csv', 'utf8')
let strToMatch = 'def123'
let c = headers + file
csv().fromString(c)
.then((json) => {
let arr = json.filter(el => el.a == strToMatch)
res.json({
a: arr[0]['a'],
b: arr[0]['b'],
c: arr[0]['c']
})
})