csv-array CSVファイル→二次元配列・連想配列


配列 = csvArray(CSVファイル名 [. 配列名称])

カンマ区切りのCSV形式の外部ファイルを読み、多様な形式の二次元配列を配列に戻します。
また、その配列および行数や行名などの関連データををポップアップにも出力するので、それを適当なファイルに保存すれば、他のシステムで利用することができます。
テストの[実行] では、さらに末尾の「結果が表示されます」欄に、それ以外の結果情報を表示します。

関数群

csvArray()以外の関数は内部でcsvArray()を呼び出しています。

関数配列の特徴
csvArray(csv-url [. 配列名称])配列だけ
csvArrayCol(csv-url [. 配列名称,列名称])先頭行の要素が列名になる
csvArrayRow(csv-url [. 配列名称,行名称])各行の先頭要素が行名になる
csvArrayRowCol(csv-url [. 配列名称,行名称,行名称])行名と列名が戻される。元配列の[0][0]を a0 として戻す
csvArrayColHush(csv-url [. 配列名称])連想配列[列名][i]になる(列名が第1添え字になる)
csvArrayRowHush(csv-url [. 配列名称])連想配列[行名][j]になる
csvArrayRowColHush(csv-url [. 配列名称])連想配列[行名][列名]になる

CSVファイルの条件

CSVファイルの条件は、
 ・カンマ区切りのCSV形式
 ・文字コードは UTF-8
 ・要素中に区切り記号「,」がない
 ・先頭や途中行中に空白行がない(末尾行の空白行は任意)
であれば、かなり任意の記述であっても、意図した結果が得られます。

例示での"csv/test.csv" の内容

    氏名,   所属       // 行末尾の要素が欠け、直前の区切り記号もありません。undrfinedになります。
   阿部 , 生 産 , 12   // 阿部と生産の末尾、生産の要素中に半角スペースがあります。前後も空白は無視されます。
  "井上",   null, 22   // 中間の要素がnull指定です。
        ,  販売, "32"  // 先頭要素が空白です。'' とみなされます。32 が " " で囲まれています。
    江藤,  "経理",     // 右側の要素がなく、区切り記号はありますが、undrfinedになります。
                       // 以下に空白行がないか、複数行あることもあります、

読み込んで配列にしたときは、次のようになっています。

 配列[0][0]=氏名 配列[0][1]=所属 配列[0][2]=undrfined
 配列[1][0]=阿部 配列[1][1]=生 産 配列[1][2]=12
 配列[2][0]=井上 配列[2][1]= nul1 配列[2][2]=22
 配列[3][0]=""   配列[3][1]=販売 配列[3][2]="32"
 配列[4][0]=江藤 配列[4][1]=経理 配列[4][2]=undrfined

null と "" の考え方

数値計算
  x=12; y=null; z=22 のとき、null は 0 とみなされ、x+y+z=23 になります。
  x=12; y="";  z=22 のとき、x+y+z=1222 となってしまいます。
文字列操作
  a="aa'; b=null; c="cc" のとき、a+b+c=aanullcc となってしまいます。
  a="aa'; b="";  c="cc" のとき、a+b+c=aacc となります。
すなわち、数値計算ではnull、文字列操作が適切ですが、関数内で切り分けるのは困難です。
csvArray()では、undefined を null に変換しています。多くの場合、配列要素は数値として計算されることが多いと思うからです。 これが不適切な場合は、changeArrayNullBlank()で再変換をしてください。

数値と文字列

ファイルららの読込みでは、行や列への分解や空白の扱いなどで多様な文字列操作をしますので、12 という数値が '12' という文字列になってしまうことが多くあります、そのため、「数値に変換可能な文字列」の型を string から number に変換する必要があります、
しかし、'32' という文字列指定を変換から除外するのはかなり厄介なので、ここでは 32 という数値を与えたことにしています(勝手に''を外しています)。

csvArrayCol などの関連関数では、内部で csvArray() を用いているので、undefined の要素は存在しません。
しかし、行名や列名は数値よりも文字列として使うことが多いので、null を '' に繁閑しています。
特に連想配列でのキー項目は、空白が許されないので、'' を 'col' + j や 'row' + j に置き換えています。

別ウインドウでのJSリスト

CSVファイルから読み込んで直ちに目的の処理を行うよりも、いったん、このリストをコピーしておき、適宜修正をして、処理プログラムにペーストするほうが多いと思われます。
そのとき、文字列は ' ' で囲む必要がありますし、配列[i][j] = ; はエラーになるので、配列[i][j] = ''; とする必要があります。
これでも、配列[i][j] = null; を、 'null'(文字列) と解釈されることもありそうです。プログラム作成時にチェックするほうが安産です。

使用法

呼出側のプログラムは、次の青字のように記述します。不要なものは省略できます。
「実行]をクリックすると、この表の下に青字で表示されます。

オプションの「配列名称」に例えば "配列" を与えると、別ウインドウに、次のような結果が表示されます。
   var 配列 = [];
    配列[0] = [];
     配列[0][0] = '氏名';
     配列[0][1] = '所属';
       :

csvArray(csv-url)
var 戻り値
 = csvArray("csv/test.csv");
var 配列 = 戻り値.array;
var 行数 = 戻り値.rowlength;
var 列数 = 戻り値.collength;
csvArrayCol(csv-url)
var 戻り値
 = csvArrayCol("csv/test.csv");
var 配列 = 戻り値.array;
var 列名 = 戻り値.col;
var 行数 = 戻り値.rowlength;
var 列数 = 戻り値.collength;
csvArrayRow(csv-url)
var 戻り値
 = csvArrayRow("csv/test.csv");
var 配列 = 戻り値.array;
var 行名 = 戻り値.row;
var 行数 = 戻り値.rowlength;
var 列数 = 戻り値.collength;
csvArrayRowCol(csv-url)
var 戻り値
 = csvArrayRowCol("csv/test.csv");
var 配列 = 戻り値.array;
var 行名 = 戻り値.row;
var 列名 = 戻り値.col;
var A0 = 戻り値.a0;
var 行数 = 戻り値.rowlength;
var 列数 = 戻り値.collength;
csvArrayColHush(csv-url)
var 戻り値
 = csvArrayColHush("csv/test.csv");
var 配列 = 戻り値.array;
var 列名 = 戻り値.col;
var 行数 = 戻り値.rowlength;
var 列数 = 戻り値.collength;
csvArrayRowHush(csv-url)
var 戻り値
 = csvArrayRowHush("csv/test.csv");
var 配列 = 戻り値.array;
var 行名 = 戻り値.row;
var 行数 = 戻り値.rowlength;
var 列数 = 戻り値.collength;
csvArrayRowColHush(csv-url)
var 戻り値
 = csvArrayRowColHush("csv/test.csv");
var 配列 = 戻り値.array;
var 行名 = 戻り値.row;
var 列名 = 戻り値.col;
var A0 = 戻り値.a0;
var 行数 = 戻り値.rowlength;
var 列数 = 戻り値.collength;
結果が表示されます。