Обработка CSV-файла с неравным количеством столбцов в узлах - PullRequest
0 голосов
/ 03 августа 2020

У меня есть следующая функция, которая обрабатывает мой CSV-файл. К сожалению, файл csv имеет один столбец, в котором также используется запятая в качестве разделителя тысяч (я не имею никакого влияния на этот экспортированный файл csv и его структуру). Таким образом, в каждом файле из определенной строки будет один дополнительный столбец.

В методе on ('data', ()) я уже исправил это значение, объединив два поля вместе и удалив поле избыточное поле. Но, в конце концов, это все равно приводит к строкам с дополнительным столбцом. При этом 4-й столбец будет пустым ..

Я бы хотел, чтобы каждое поле «сдвигалось» влево при удалении поля. Можно ли этим манипулировать? Или мне нужна дополнительная функция, которая обрабатывает вывод и игнорирует все «нулевые» поля.

function readLines(file, options, cb){
  let results = [];
  fs.createReadStream(file)
  .pipe(csv(options))
  .on('data', (data) => {
    if(Object.keys(data).length == 59){
      data['2'] = data['2'] + data['3']
      delete data['3']
    }
    results.push(data)
  })
  .on('end', () => {
    cb(results)
  });
}

1 Ответ

0 голосов
/ 05 августа 2020

Я исправил это, отфильтровав возвращаемый объект в функции обратного вызова:

cb(Object.values(results).map((r) => {
      return r.filter((x) =>{
        return x != null && x !== ""
      })
    }))

Вероятно, не самый эффективный, но лучший, который я мог придумать до сих пор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...