Поскольку в конечном итоге предполагается использовать в качестве входных данных настоящие csv-файлы, вам нужно убедиться, что все ваши значения разделены запятыми. Я уверен, что именно так работают файлы CSV .... может быть неправильно. В конце каждой строки у вас нет запятой. Я исправил это в моем фрагменте ниже.
Я также исправил использование 4 столбцов (у вас, кажется, есть 4 заголовка, но вы пытаетесь использовать только 3?), Переместил строку index ++ на перед тем, как использовать , перед проверкой на неопределенные значения объединение строк и удаление пустого заголовка.
var csv = "FirstName,LastName,dob,phone,"+
"John,Smith,10/01/1998,21234123,"+
"Millie,Henderson,23/03/2000,21768345,"+
"Briana,Wright,23/03/1976,22321467";
function csvJSON(csv){
var values=csv.split(',');
var index =-1;
var lines = [];
for(var i=0;i<values.length; i++){
if (i % 4==0){
index++;
}
if (typeof lines[index] === 'undefined') lines[index] = "";
lines[index] = lines[index]+ values[i]+ ",";
}
var result = [];
var headers=lines[0].split(',').splice(0, lines.length);
lines.splice(0, 1);
lines.forEach(function(line) {
var obj = {};
var currentline = line.split(',');
headers.forEach(function(header, i) {
obj[header] = currentline[i];
});
result.push(obj);
});
return result; //JavaScript object
//return JSON.stringify(result); //JSON
}
console.log(csvJSON(csv))
Существует два формата для перенаправления стандартного вывода и стандартной погрешности:
&>word
и
>&word
Из двух форм предпочтено первое. Это семантически эквивалентно
>word 2>&1
Фраза, "семантически эквивалентная", должна уладить проблему с Вашим коллегой.
Ситуация, где эти две строки имеют другое поведение, состоит в том, когда Ваш сценарий не работает в ударе, но некоторой более простой оболочке в sh семействе, например, тире (которому я верю, используется в качестве/bin/sh в некоторых дистрибутивах Linux, потому что это более легко, чем удар). В этом случае,
fooscript &> foo
интерпретируется как две команды: первый выполняет fooscript в фоновом режиме, и второй усекает нечто файла. Команда
fooscript > foo 2>&1
выполнения fooscript на переднем плане и перенаправлениях его ошибка на выходе и стандартная погрешность к нечто файла. В ударе я думаю, что строки будут всегда делать то же самое.
Главная причина использовать 2>&1
, по моему опыту, когда Вы хотите добавить весь вывод в файл, а не перезаписать файл. С &>
синтаксис, Вы не можете добавить. Таким образом с 2>&1
, можно записать что-то как program >> alloutput.log 2>&1
и получите stdout и вывод stderr, добавленный к файлу журнала.
&>foo
меньше вводит, чем >foo 2>&1
, и менее подверженный ошибкам (Вы не можете получить его в неправильном порядке), но достигает того же результата.
2>&1
сбивает с толку, потому что необходимо поместить его после 1>
перенаправление, если stdout не перенаправляется к a |
канал, в этом случае это идет прежде...
$ some-command 2>&1 >foo # does the unexpected $ some-command >foo 2>&1 # does the same as $ some-command &>foo # this and $ some-command >&foo # compatible with other shells, but trouble if the filename is numeric $ some-command 2>&1 | less # but the redirect goes *before* the pipe here...
&> foo # Will take all and redirect all output to foo.
2>&1 # will redirect stderr to stdout.
2> &1 зависит от порядка, в котором он указан на командной строке. Куда и> отправляет и stdout и stderr к тому, везде, куда, 2> &1 отправляет stderr туда, где stdout в настоящее время идет в той точке в командной строке. Таким образом:
команда> файл 2> &1
отличается, чем:
команда 2> &1> файл
где первый перенаправляет и stdout и stderr в файл, последние перенаправления stderr туда, где stdout идет, прежде чем он будет перенаправлен в файл (в этом случае, вероятно, терминал.) Это полезно, если Вы хотели сделать что-то как:
команда 2> &1> файл | меньше
Где Вы хотите использовать меньше, чтобы пролистать вывод stderr и сохранить вывод stdout в файл.
2>&1
могло бы быть полезно для случаев, где Вы не перенаправляете stdout к где-то в другом месте, а скорее Вы просто хотите, чтобы stderr был отправлен в то же место (такое как консоль) как stdout (возможно, если команда, которую Вы выполняете, уже отправляет stderr где-то в другом месте кроме консоли).