2017-01-21 9 views
6

Я пытаюсь прочитать файл csv с помощью узла js. Ее мой кодКак читать файл csv в узле js

fs.readFile(config.csvUploadPath, function read(err, data) { 
    if (err) { 
     throw err; 
    } 
    console.log(data + 'my data') 
}); 

CONSOLE:

ID 
D11 
D33 
D55 

Здесь я хочу, чтобы получить элементы в столбце ID и сохранить их в массиве. Как я могу это сделать? Может ли кто-нибудь предложить мне помощь. Благодарю. Мой контроллер:

var partnersModel = new partners(params); 
     fs.readFile(config.csvUploadPath, function read(err, data) { 
      if (err) { 
       throw err; 
      } 
     dataArray = data.toString().split(/\r?\n/); 
      dataArray.forEach(function(v,i){ 
       if(v !== 'DUI'){ 
        partnersModel.dui.push(v); 
       } 
      }); 
     }); 
     partnersModel.save(function(error, response){ 
+1

http://stackoverflow.com/questions/23080413/nodejs-reading-csv-file –

+0

Возможный дубликат [NodeJs, читающий файл csv] (http://stackoverflow.com/questions/23080413/nodejs-reading-csv -file) – crowchirp

+0

Действительно ли это файл CSV или просто файл, содержащий список идентификаторов? Это было бы довольно легко разобрать без библиотеки, но если вы разбираете истинный CSV, обязательно используйте его! Мой модуль выбора: https://www.npmjs.com/package/csv –

ответ

9

Используйте библиотеку, CSV имеет множество подводных камней. Я пришел, чтобы насладиться пакетом csv. Он находится здесь: https://www.npmjs.com/package/csv. Вот очень быстрый пример использования async api.

const fs = require('fs') 
var parse = require('csv-parse') 
fs.readFile(inputPath, function (err, fileData) { 
    parse(fileData, {columns: false, trim: true}, function(err, rows) { 
    // Your CSV data is in an array of arrys passed to this callback as rows. 
    }) 
}) 

Поскольку файл не имеет несколько значений в каждом ряду и не содержит никаких ограничителей, кроме символа новой строки, это только тривиальным CSV. Может быть, String.prototype.split() для вас?

const fs = require('fs') 
fs.readFile(inputPath, 'utf8', function (err, data) { 
    var dataArray = data.split(/\r?\n/); //Be careful if you are in a \r\n world... 
    // Your array contains ['ID', 'D11', ... ] 
}) 
+0

Спасибо, из вашего кода, что я получу как надеть? – MMR

+0

rows = ['11', '33, '34'] ....? – MMR

+0

Файлы CSV обычно имеют несколько значений для каждой строки, поэтому он возвращает массив массивов ... по одному для каждой строки. Для вашего примера 'rows = [['id'], ['D11'], ['D33'], ['D55']]'. Обратите внимание, что заголовок также анализируется, и для индексации одного из значений вам нужно будет использовать что-то вроде 'rows [1] [0]'. –

0

От How to read data From *.CSV file using javascript? используйте библиотеку jQuery-CSV.

Примечание: Библиотека предназначена для обработки любых CSV-данных, совместимых с RFC 4180, включая все неприятные кромки, которые пропускаются большинством «простых» решений.

var fs = require('fs'); 
var $ = jQuery = require('jquery'); 
$.csv = require('jquery-csv'); 

var sample = './path/to/data/sample.csv'; 
fs.readFile(sample, 'UTF-8', function(err, csv) { 
    $.csv.toArrays(csv, {}, function(err, data) { 
    for(var i=0, len=data.length; i<len; i++) { 
     console.log(data[i]); //Will print every csv line as a newline 
    } 
    }); 
}); 

фрагмент кода из примеров jquery-csv «s here.