2012-10-04 3 views
1

У меня есть следующий код: Node.jsnode.js разбора CSV файл с ленивым

new lazy(fs.createReadStream('file.csv')) 
    .lines 
    .forEach(function(line){ 
    console.log(line.toString()); 
    }); 

Однако, я только получить последнюю строку данных таким образом. Содержимое файла CSV в следующем:

123, разбитый
12345, украдена
1234567, потерял

Что я здесь делаю неправильно?

У меня также есть этот код для того же файла:

fs.readFile(req.files.file.path, 'utf8', function (err, data) { 
    if (err) throw err; 
    var lines = data.split(/\r?\n/); 
    console.log(lines); 
}); 

который возвращает следующий массив:

[ '123,broken\r12345,stolen\r1234567,lost' ] 
+0

Так что ваш файл сломан, он должен быть '\ r \ n' не просто' \ r'; что так очевидно по вашему собственному тесту. – Chad

+0

Просьба уточнить – user1175817

+0

Библиотека (и ваш 'data.split()') ищет либо '\ r \ n' (возврат каретки, новая строка), либо' \ n' (новая строка). Однако ваш файл csv использует '\ r' в качестве разделителя строк. Это неверно; сделайте все, что пишет ваш файл csv, используйте '\ r \ n' или' \ n'. – Chad

ответ

2

\r\n, \n и \r все действительные окончаний линии, так что вам нужно будьте готовы разделить на них все.

Перед тем, как выполнить разделение, преобразуйте их в общую ценность. Что-то вроде:

var lines = data.replace(/\r\n?/g, "\n").split("\n"); 
Смежные вопросы