Home Reference Source
import NTCsv from 'ntcsv/src/NTCsv.js'
public class | source

NTCsv

CSV形式のテキストなどを扱うユーティリティクラス

主な特徴:

  • 区切り文字のカスタマイズ(デフォルトは ,
  • ダブルクォートで囲まれたフィールドや改行を含むフィールドのパースに対応
  • 2次元配列 ⇄ CSVテキスト、CSV配列 ⇄ JSON配列 の相互変換

Static Method Summary

Static Public Methods
public static

create(csv_array: Array<Array<string>>, separator: string, newline: string): string

2次元配列からCSVテキストを作成します。

public static

parse(text: string, separator: string): Array<Array<string>>

CSVテキストから2次元配列を作成します。

public static

共通のキー構造を持つJSON配列を、CSV配列へ変換します。

public static

1行目に列名があるCSV配列を、オブジェクトの配列(JSON配列)に変換します。

Static Public Methods

public static create(csv_array: Array<Array<string>>, separator: string, newline: string): string source

2次元配列からCSVテキストを作成します。

  • フィールド内に " または 改行(\r/\n) または 区切り(, デフォルト)またはタブが含まれる場合、 当該フィールドをダブルクォートで囲み、内部の """ にエスケープします。
  • 改行コードは newline 引数で指定できます(デフォルトは "\r\n")。

Params:

NameTypeAttributeDescription
csv_array Array<Array<string>>

CSVの各行を要素に持つ2次元配列

separator string
  • optional
  • default: ","

区切り文字

newline string
  • optional
  • default: "\r\n"

出力時の改行コード

Return:

string

CSVテキスト

Example:

const rows = [["name","note"],["Alice","He said \"Hello\""]];
const csv = NTCsv.create(rows);
// csv => "name,note\r\n\"Alice\",\"He said \"\"Hello\"\"\"\r\n"
// セミコロン区切り & LF改行
const rows = [["id","memo"],["1","hello;world"]];
const csv = NTCsv.create(rows, ";", "\n");
// csv => "id;memo\n\"1\";\"hello;world\"\n" (必要箇所がクォートされる)

public static parse(text: string, separator: string): Array<Array<string>> source

CSVテキストから2次元配列を作成します。

  • 改行コードは \r\n?|\n\n に正規化してから解析します。
  • ダブルクォートで囲まれたフィールド内では、"" は文字としての " として扱います。
  • ダブルクォートで囲まれたフィールドは複数行にまたがっても1フィールドとして扱います。

Params:

NameTypeAttributeDescription
text string

CSV形式のテキスト

separator string
  • optional
  • default: ","

区切り文字(例: ",""\t"";" など)

Return:

Array<Array<string>>

CSVの各行を配列として持つ2次元配列

Example:

// 基本: カンマ区切り
const csvText = "name,age\nAlice,30\nBob,25";
const rows = NTCsv.parse(csvText);
// rows => [["name","age"],["Alice","30"],["Bob","25"]]
// セミコロン区切り
const text = "id;memo\n1;hello;world"; // ← 'hello;world' を一つのセルにしたい場合はクォートが必要
const rows = NTCsv.parse("id;memo\n1;\"hello;world\"", ";");
// rows => [["id","memo"],["1","hello;world"]]
// 改行を含むフィールド(ダブルクォートで囲む)
const t = "id,comment\n1,\"line1\nline2\"";
const r = NTCsv.parse(t);
// r => [["id","comment"],["1","line1\nline2"]]

public static toCSVArrayFromJSONArray(json_array: Array<Object<string, string>>, title_array: Array<string>): Array<Array<string>> source

共通のキー構造を持つJSON配列を、CSV配列へ変換します。

  • title_array を指定しない場合は、json_array[0] のキー列挙順をタイトルとします。
  • 各オブジェクトの値は title_array(または自動抽出したキーリスト)の順に並べます。
  • オブジェクトに存在しないキーの値は undefined(結果のセルは undefined)になります。

Params:

NameTypeAttributeDescription
json_array Array<Object<string, string>>

同一キー構造のオブジェクト配列

title_array Array<string>
  • optional

ヘッダーに使用するキー名の配列(順序固定に便利)

Return:

Array<Array<string>>

先頭行がヘッダーのCSV配列

Example:

const json = [{ name: "Alice", age: "30" }, { name: "Bob", age: "25" }];
const rows = NTCsv.toCSVArrayFromJSONArray(json);
// rows => [["name","age"],["Alice","30"],["Bob","25"]]
// 列順を指定したい場合
const json2 = [{ name: "Alice", age: "30" }, { name: "Bob", age: "25" }];
const rows2 = NTCsv.toCSVArrayFromJSONArray(json2, ["age","name"]);
// rows2 => [["age","name"],["30","Alice"],["25","Bob"]]

public static toJSONArrayFromCSVArray(csv_array: Array<Array<string>>): Array<Object<string, string>> source

1行目に列名があるCSV配列を、オブジェクトの配列(JSON配列)に変換します。

  • csv_array[0] をキー配列として使用します。
  • 2行目以降は、対応するキー名を持つオブジェクトにマッピングされます。
  • 列数が合わない場合は、存在するキーに対応する範囲でプロパティが作成されます(不足分は undefined)。

Params:

NameTypeAttributeDescription
csv_array Array<Array<string>>

先頭行がヘッダーのCSV配列

Return:

Array<Object<string, string>>

キー:ヘッダー名、値:セル文字列のオブジェクト配列

Example:

const rows = [["name","age"],["Alice","30"],["Bob","25"]];
const json = NTCsv.toJSONArrayFromCSVArray(rows);
// json => [{ name: "Alice", age: "30" }, { name: "Bob", age: "25" }]
// 列が足りない行がある場合
const rows2 = [["a","b","c"],["1","2"],["3","4","5"]];
const json2 = NTCsv.toJSONArrayFromCSVArray(rows2);
// json2 => [{a:"1", b:"2", c:undefined}, {a:"3", b:"4", c:"5"}]