NTCsv
CSV形式のテキストなどを扱うユーティリティクラス
主な特徴:
- 区切り文字のカスタマイズ(デフォルトは
,) - ダブルクォートで囲まれたフィールドや改行を含むフィールドのパースに対応
- 2次元配列 ⇄ CSVテキスト、CSV配列 ⇄ JSON配列 の相互変換
Static Method Summary
| Static Public Methods | ||
| public static |
2次元配列からCSVテキストを作成します。 |
|
| public static |
CSVテキストから2次元配列を作成します。 |
|
| public static |
toCSVArrayFromJSONArray(json_array: Array<Object<string, string>>, title_array: Array<string>): Array<Array<string>> 共通のキー構造を持つ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")。
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フィールドとして扱います。
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)になります。
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)。
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"}]
