Skip to content

RU Форматирование CSV

mingun edited this page Jun 18, 2014 · 4 revisions

ВикиСправка по APIФорматирование CSV
English | Русский

D3 предоставляет встроенную поддержку разбора формата значений, разделённых запятой, разделённых знаками табуляции и вообще произвольными символами. Эти табличные форматы пользуются большой популярностью в табличный процессорах типа Microsoft Excel. Табличные форматы часто более компактные, нежели JSON, что позволяет сократить время загрузки больших наборов данных.

# d3.csv(url[, accessor][, callback])

Совершает HTTP GET-запрос файла со значениями, разделёнными запятой (CSV) по указанному адресу url. Содержимое файла предполагается совместимым с RFC4180. MIME-тип запроса будет «text/csv». Запрос выполняется асинхронно, так что метод возвращает управление сразу же после отправки запроса. Когда данные CSV загрузятся, вызовется указанная функция обратного вызова callback с разобранными строками в качестве аргумента. Если возникнет ошибка, аргументом функции будет null. Если указана необязательная функция доступа accessor, она будет передана в d3.csv.parse; также функция доступа может быть указана в методе row возвращённого объекта запроса. Пример:

d3.csv("path/to/file.csv")
  .row(function(d) { return {key: d.key, value: +d.value}; })
  .get(function(error, rows) { console.log(rows); });

Смотрите картограмму безработицы для примера.

# d3.csv.parse(string[, accessor])

Разбирает указанную строку string, являющуюся содержимым CSV-файла, возвращает масив объектов, представляющих разобраные строки. Содержимое строки предполагается совместимым с RFC4180. В отличии от метода parseRows, даныый метод требует, чтобы первая строка CSV-файла содержала список названий колонок, разделённый зяпятыми; эти названия станут атрибутами возвращённого объекта. Например, рассмотрим следующий CSV-файл:

Year,Make,Model,Length
1997,Ford,E350,2.34
2000,Mercury,Cougar,2.38

Получившийся JavaScript-массив будет следующим:

[
  {"Year": "1997", "Make": "Ford", "Model": "E350", "Length": "2.34"},
  {"Year": "2000", "Make": "Mercury", "Model": "Cougar", "Length": "2.38"}
]

Обратите внимание, что значения всегда являются строками; они не преобразуются автоматически в числа. JavaScript позволяет автоматически приводить строки к числам (например, путём использования оператора +). Указав функцию доступа accessor, вы сможете преобразовывать строки в числа или другие подходящие типы, например, даты:

d3.csv("example.csv", function(d) {
  return {
    year: new Date(+d.Year, 0, 1), // преобразуем колонку «Year» в объект Date
    make: d.Make,
    model: d.Model,
    length: +d.Length // преобразуем колонку «Length» в число
  };
}, function(error, rows) {
  console.log(rows);
});

Использование оператора + вместо функций parseInt или parseFloat обычно быстрее, но и накладывает больше ограничений. Например, строка «30px» при приведении к числу с помощью оператора + превратися в NaN, в то время как parseInt и parseFloat вернут значение 30.

# d3.csv.parseRows(string[, accessor])

Разбирает указанную строку string, являющуюся содержимым CSV-файла, возвращает масив массивов, представляющих разобраные строки. Содержимое строки предполагается совместимым с RFC4180. В отличии от метода parse, даныый метод трактует строку заголовка как обычную строку и может использоваться с CSV-файлами, не содержащими заголовка. Каждая строка представляется массивом сместо объекта. Строки могут имять различную длину. Например, рассмотрим следующий CSV-файл:

1997,Ford,E350,2.34
2000,Mercury,Cougar,2.38

Получившийся JavaScript-массив будет следующим:

[
  ["1997", "Ford", "E350", "2.34"],
  ["2000", "Mercury", "Cougar", "2.38"]
]

Обратите внимание, что значения всегда являются строками; они не преобразуются автоматически в числа. Смотрите документацию по методу parse для подробностей.

Вторым аргументом может быть указана необязательная функция доступа accessor. Эта функция вызывается для каждой строки в CSV-файле с секущей строкой и индексов в качестве аргументов. Возвращаемое значение функции заменяет элемент в возвращённом массиве строк; если функция возвращает null, строка удаляется из массива строк. В сущности, использование функции доступа аналогично применению операторов map и filter к возвращённым строкам. Функция доступа используется в методе parse для преобразования каждой строки в объект с именованными атрибутами.

# d3.csv.format(rows)

Преобразует указанный массив строк rows в строку значений, разделённых запятыми. Этот оператор делает обратную работу по отношению к методу parse. Строки будут разделены символами новой строки (\n), а колонки — запятыми (,). Значения, содержащие запятые, двойные кавычки (") или символы новой строки будут экранированы двойными кавычками.

Каждая строка должна быть объектом и все свойства объекта будут преобразованы в поля. Для более детального контроля над тем, какие свойства нужно преобразовывать, преобразуйте строки в массив, содержащий только те свойства, что должны быть преобразованы и воспользуйтесь методом formatRows.

# d3.csv.formatRows(rows)

Преобразует указанный массив строк rows в строку значений, разделённых запятыми. Этот оператор делает обратную работу по отношению к методу parseRows. Строки будут разделены символами новой строки (\n), а колонки — запятыми (,). Значения, содержащие запятые, двойные кавычки (") или символы новой строки будут экранированы двойными кавычками.

TSV

Формат значений, разделённых символами табуляции эквивалентен формату значений, разделённых запятыми, за исключением того, что в качестве разделителя используются символы табуляции, а не запятые.

# d3.tsv(url[, accessor][, callback])

Эквивалентен d3.csv, но для значений, разделённых символами табуляции.

# d3.tsv.parse(string[, accessor])

Эквивалентен csv.parse, но для значений, разделённых символами табуляции.

# d3.tsv.parseRows(string[, accessor])

Эквивалентен csv.parseRows, но для значений, разделённых символами табуляции.

# d3.tsv.format(rows)

Эквивалентен csv.format, но для значений, разделённых символами табуляции.

# d3.tsv.formatRows(rows)

Эквивалентен csv.formatRows, но для значений, разделённых символами табуляции.

Arbitrary Delimiters

# d3.dsv(delimiter, mimeType)

Конструирует новый парсер для указанных разделителя и MIME-типа. Например, для разбора значений, разделённых вертикальной чертой («|»), используйте:

var dsv = d3.dsv("|", "text/plain");

# dsv(url[, accessor][, callback])

Эквивалентен d3.csv, но для значений, разделённых произвольным разделителем.

# dsv.parse(string[, accessor])

Эквивалентен csv.parse, но для значений, разделённых произвольным разделителем.

# dsv.parseRows(string[, accessor])

Эквивалентен csv.parseRows, но для значений, разделённых произвольным разделителем.

# dsv.format(rows)

Эквивалентен csv.format, но для значений, разделённых произвольным разделителем.

# dsv.formatRows(rows)

Эквивалентен csv.formatRows, но для значений, разделённых произвольным разделителем.

Clone this wiki locally