Newer
Older
2022-miiiii / saigo / csv_sample.js
@みのさんじょー みのさんじょー on 26 Nov 2022 2 KB koredato
(() => {
    var cafe = [],	// 読み取ったCSV全てが入る配列
	ncafe,		// データの個数(quiz.lengthのまま使ってもよい)
	pos=0;		// 現在の配列の添字位置
    var csvfile = "data.csv";	// CSVデータファイル名
    function putValues(row) {
	// CSVの1行分のJSONがrowに入る
	for (let key of Object.keys(row)) {
	    // Object.keys(JSON)でキーを1個ずつ取り出す(Rubyのkeys)
	    let id = "__" + key + "__"; // HTML要素のID
		console.log(id);
		console.log(row[key]);
	    let elem = document.getElementById(id);
	    if (elem) {  // もし id="__カラム名__" の要素が見つかったら
			if (elem.tagName.match(/img/i)) {
				elem.src=row[key];
			} else if (elem.tagName.match(/^a$/i)) { //^ はじめ $ 文末
				if (row[key]==""){
				elem.href=row[ないよ]
				} else {
				elem.href=row[key];
				}
			} else {
				elem.innerText = row[key];
			}
	    }
	}
    }
    
    function btn(n) {	// nで指定した数だけ現在位置(pos)をずらす
	pos = Math.floor(Math.random() * cafe.length);	// 0以上 ncafe以下 になるよう調整
	putValues(cafe[pos]);		// ずらした添字位置で文書書き換え
    }
 
	//ランダムにするのここからかく
  //  function btn() {
   //     let cafe2 = Math.floor(Math.random() * cafe.length);
    //}
   
    function init() {			// HTML文書を読み終わったら呼ばれる
	fetch(csvfile).			// csvfileをサーバから読み込んで
	    then((resp) => {		// 応答がrespに入るので
		if (resp.ok) return resp.text();	// テキストを返す
	    }).then((txt) => {		// テキストが txt に入るので
		cafe = new CSV(txt, {header: true}).parse(); // CSV解析
		ncafe = cafe.length;	// 行数を記憶
		putValues(cafe[pos]);	// 最初の行のデータを表示
	    });;
	document.getElementById("btn").addEventListener("click", btn);
	//document.getElementById("right").addEventListener("click", right);
    }
    document.addEventListener("DOMContentLoaded", ()=>{
	init();	// ブラウザの文書読み込みが完了したらここに来る
    }, false);
})();