2021년 목표설정

이미지
기본적으로 작년에 달성하지 못한 것들을 하려고 생각중인데..코로나가 언제까지 이어질지, 한국이나 북해도는 갈 수 있을지..자격증은 응시 가능할지..여러가지가 불확실하다. 2021년은 무엇보다 정신적인 부분과 경제적인 부분에 중점을 두고 조금 더 치열하게 지내보고 싶다. 일본나이로도 30대 마지막 해, 이제 불혹에 접어드는 나이..복잡하지만 심플하게. 육체적목표 : 트라이에슬론 스탠다드 도전하기 정신적 : 자격증2개 도전 + 자체개발 서비스 론칭 가족적 : 가정의 평화를 유지하기 경제적 : 외식과 유흥비를 줄이고 부수입을 늘려서 결과적으로 저축하기 사회적 : 목표세미나를 포함해서 민단과 개인인맥의 활성화와 교류를 촉진하기

ES5 規定の JSON と同じインターフェースを持つCSVパーサ

csv.js

概要

ES5 規定の JSON と同じインターフェースを持つCSVパーサです。 使い方は JSON と同じなので JSON を扱った事のある人は違和感なく使えると思います。

CSV API

CSV

CSV は単純な Object 型であり、関数でもコンストラクタでもありません。
console.log(typeof CSV);  // "object"
CSV();                    // TypeError: CSV is not a function
new CSV();                // TypeError: CSV is not a constructor(
CSV の @@toStringTag は "CSV" です。 (@@toStringTag は ES6 規定の Symbol 値です。)
console.log(Object.prototype.toString.call(CSV)); // "[object CSV]"

CSV.parse(csvString [, separator, reviver])

第一引数に与えられたCSV文字列をパースし、二次元配列を返します。
var array = CSV.parse('"A1","B1"\r\n"A2","B2"');
console.log(array); // [["A1","B1"],["A2","B2"]]

第二引数 separator (オプション)

第二引数でCSVの区切り文字を指定できます。 第二引数が省略された場合、区切り文字はカンマ(')として扱われます。
var array = CSV.parse('"A1"|"B1"\r\n"A2"|"B2"', '|');
console.log(array); // [["A1","B1"],["A2","B2"]]
ただし、区切り文字は1文字でなければなりません。2文字以上の区切り文字が指定された場合は1文字目が区切り文字として扱われます。 (2文字以上は技術的には可能ですが、CSV.parse の処理速度低下に繋がるのであえて1文字に制限しています。2文字以上の区切り文字は要望が多ければ検討します。)
var array = CSV.parse('A1<>B1\r\nA2<>B2', '<>');
console.log(array); // [["A1",">B1"],["A2",">B2"]]

第三引数 reviver (オプション)

第三引数 reviver を指定すると、セル値を引数にとるコールバック関数 reviver を呼び出した返り値を要素値に代入します。
var array = CSV.parse('A1,B1\r\n1,2', ',', function reviver (value) {
  var number = Number(value);
  return number.toString() === value ? number : value;
});
console.log(array); // [["A1","B1"],[1,2]]

CSVフォーマットのエスケープ規則

  • CSVのセル値はダブルクォートで括らなくても構いません。ダブルクォートで括られなかった場合、「改行、区切り文字」が後述するまで貪欲に消費してセル値として扱われます。
  • CSVのセル値をダブルクォートで括ると改行や区切り文字(デフォルトではカンマ ')を含める事が可能です。
  • CSVのセル値でダブルクォートを表現したい場合、ダブルクォートで括った上で "" を入力する事でエスケープできます。
/**
 * セル値はダブルクォートで括らなくても良い
 */
var array = CSV.parse('A1,B1\r\nA2,B2');
console.log(array); // [["A1","B1"],["A2","B2"]]

/**
 * セル値をダブルクォートで括れば改行や区切り文字を含める事が出来る
 */
var array = CSV.parse('"A1-1\r\nA1-2","B1-1\r\nB1-2"\r\n"A2-1,A2-2","B2-1,B2-2"');
console.log(array); // [["A1-1\r\nA1-2","B1-1\r\nB1-2"],["A2-1,A2-2","B2-1,B2-2"]]

/**
 * セル値をダブルクォートで括った場合、"" でダブルクォート1文字と見なす
 */
var array = CSV.parse('"A1""","B1"""\r\n"""A2""","""B2"""');
console.log(array);  // [["A1\"","B1\""],["\"A2\"","\"B2\""]]

CSV.stringify(array [, separator, replacer])

二次元配列をCSV文字列に変換します。
var csvString = CSV.stringify([['A1','B1'],['A2','B2']]);
console.log(csvString); // "A1","B1"\r\n"A2","B2"

第二引数 separator (オプション)

第二引数でCSVの区切り文字を指定できます。 第二引数が省略された場合、区切り文字はカンマ(')として扱われます。
var csvString = CSV.stringify([['A1','B1'],['A2','B2']], '|');
console.log(csvString); // "A1"|"B1"\r\n"A2"|"B2"

第三引数 replacer (オプション)

第三引数 replacer を指定すると、CSV文字列に変換する前に配列の要素値を引数に撮るコールバック関数 replacer が呼び出され、返り値をセル値とします。
var csvString = CSV.stringify([['A1','B1'],[1,2]], ',', function replacer (value) {
  return typeof value === 'number' ? value : '"' + String(value).replace(/"/g, '""') + '"';
});
console.log(csvString); // "A1","B1"\r\n1,2

csv.js: ES5 規定の JSON と同じインターフェースを持つCSVパーサ

댓글

이 블로그의 인기 게시물

[메모] PostgreSQL에서 Insert 하는 경우 자동채번 PK가 중복에러 나는 경우

[C# & LINQ] 랜덤으로 데이터를 한 개 추출하는 방법

[react-native] uuid 생성이 에러가 날 때 대처법