/*----------------------------------------
* csvload.js
* Copyright (C) 2020 StraightApps.com, All Rights Reserved
* October 29, 2020 初期版
* November 6, 2020 リリース版
*-----------------------------------------*/
//----------------------------------------
// データの出力先の用意
const outputElement = document.getElementById('output_data');
/*----------------------------------------
* CSV ファイルを読み込む関数
*-----------------------------------------*/
function getCsvData( dataPath )
{
// HTTP でファイルを読み込むための XMLHttpRequest オブジェクトを生成します。
var req = new XMLHttpRequest();
// ファイルを読み込みます。
req.open("get", dataPath, true); // アクセスするファイルを指定
req.send(null); // HTTP リクエストの発行(引数は省略できる模様)
// レスポンスが返ってきたら、データを処理します。
// 無名関数を使わない場合 req.addEventListerner("load", onLoad);
req.onload = function(){
// 読み込んだ CSV データをそのまま見たい場合
//outputElement.innerHTML = req.responseText;
// 読み込んだ CSV データを2次元配列に変換します。
let dat = convertCSVtoArray( req.responseText );
// 好きなように処理します。
procData(dat);
}
}
//----------------------------------------
// 読み込みを実行します。
outputElement.innerHTML = "started"; // 動作状況を知るため
getCsvData( 'jsimg/csvload-attendance.csv' ); // 日本語を含む場合は Unicode 保存が必須
/*----------------------------------------
* 2次元配列になった CSV データを処理
*-----------------------------------------*/
function procData(dat)
{
// CSV 1行目は年月情報
let str = dat[0][0] + " の出欠情報
";
// CSV 2行目以降は 番号,名前,1日からの出欠情報・・・
for (let row = 1; row < dat.length; row++){
// 1カラム目は出席番号
str += ("No." + dat[row][0] + " : ");
// 2カラム目は名前
str += (dat[row][1] + "
");
// 3カラム目以降は出欠状況
// "ok" 出席
// "ab" 欠席
// "lt" 遅刻
// "ea" 早退
// "le" 遅刻&早退
// "ho" 休日
for (let col = 2; col < dat[row].length; col++){
switch (dat[row][col])
{
case 'ok':
str += '出席';
break;
case 'ab':
str += '欠席';
break;
case 'lt':
str += '遅刻';
break;
case 'ea':
str += '早退';
break;
case 'le':
str += '遅刻&早退';
break;
case 'ho':
str += '休日';
break;
default:
str += ('' + dat[row][col] + '');
break;
}
if (col < dat[row].length - 1){ // 最終項目でなければ
str += ", ";
}
}
str += "
";
}
outputElement.innerHTML = str;
}
/*----------------------------------------
* 引数の CSV データを行単位の配列に変換
*-----------------------------------------*/
function convertCSVtoArray(csv)
{
var result = []; // 最終的な二次元配列を入れるための配列
var tmp = csv.split("\r\n"); // 改行を区切り文字として行を要素とした配列を生成(Winの場合は\r必要)
// 行ごとにカンマで区切った文字列を要素とした二次元配列を生成
for (let i = 0; i < tmp.length; i++){
if (tmp[i] != ""){ // 空行を除外(特にファイル末尾)
//alert(tmp[i]);
result[i] = tmp[i].split(',');
}
}
return result;
}