/*---------------------------------------- * 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; }