質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

解決済

javascriptで間違えた問題だけをCSVファイルに保存したい

believe
believe

総合スコア63

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

1回答

0評価

1クリップ

236閲覧

投稿2022/04/07 09:30

編集2022/04/09 05:37

前提・実現したいこと
javascriptで間違えた問題だけをCSVファイルに保存したい
発生している問題・エラーメッセージ
間違えた問題が1問だけしか保存されない

該当のソースコード

javascript

<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>三択クイズ</title> </head> <body> <h1>クイズひな形</h1> <hr> <span id="001"></span> <h2>問題</h2> <div id="text_q"></div> <h2>選択</h2> <div id="text_s"></div> <h2>解答</h2> <div id="text_a"></div> <script type="text/javascript"> //問題と解答 qa = new Array(); qa[0] = ["イルカを漢字で書くとどれ?","海豚","海牛","河豚",1]; qa[1] = ["クラゲを漢字で書くとどれ?","水浮","水母","水星",2]; qa[2] = ["カタツムリを漢字で書くとどれ?","禍牛","鍋牛","蝸牛",3]; qa[3] = ["バッタを漢字で書くとどれ?","飛蝗","飛蟻","飛脚",1]; qa[4] = ["タツノオトシゴを英語にするとどれ?","sea fish","sea horse","sea dragon",2]; qa[5] = ["マグロを英語にするとどれ?","funa","suna","tuna",3]; qa[6] = ["トンボを英語にするとどれ?","fly","dragonfly","butterfly",2]; qa[7] = ["ヒトデを英語にするとどれ?","starfish","starshell","starmine",1]; qa[8] = ["恒星の中で最も明るい星は?","デネブ","スピカ","シリウス",3]; qa[9] = ["惑星の中で最も重たいのはどれ?","太陽","木星","天王星",2]; function run(){ //randomの生成 for (var i = qa.length-1; i>=0; i--){ var rand = Math.floor(Math.random() * (i+1)); var temp = qa[i]; qa[i] = qa[rand] qa[rand] = temp; document.getElementById("001").innerHTML = i + "回目= " + qa; quiz(qa); } } //初期設定 q_sel = 3; //選択肢の数 setReady(qa); function setReady() {//初期設定 count = 0; //問題番号 ansers = new Array(); //解答記録 run(); //再テストの場合のランダムの生成 quiz(); //最初の問題 } function quiz() { //問題表示 var s, n; //問題 document.getElementById("text_q").innerHTML = (count + 1) + "問目:" + qa[count][0]; //選択肢 s = ""; for (n=1;n<=q_sel;n++) { s += "【<a href='javascript:anser(" + n + ")'>" + n + ":" + qa[count][n] + "</a>】"; } document.getElementById("text_s").innerHTML = s; } function anser(num) { //解答表示 var s; s = (count + 1) + "問目:"; //答え合わせ if (num == qa[count][q_sel + 1]) { //正解 ansers[count] = "○"; } else { ansers[count] = "×"; } s += ansers[count] + qa[count][num]; document.getElementById("text_a").innerHTML = s; var TempData TempData.push(qa); var str = ""; var len_qa =Object.keys(TempData[0]).length; for(var i = 0; i<len_qa; i++){ alert(qa); if(i==0){ str += "Temp,"+qa[i] +","; }else if(i==len_qa-1){ str += TempData[i]+"\n"; //Satで改行する }else{ str += TempData[i]+","; //カンマで区切る } } alert(s); console.log(s); var blob =new Blob([s],{type:"text/csv"}); //配列に上記の文字列(s)を設定 var link =document.createElement('a'); link.href = URL.createObjectURL(blob); link.download ="tempdate.csv"; link.click(); //次の問題を表示 count++; if (count < qa.length) { quiz(); } else { //終了 s = "<table border='2'><caption>成績発表</caption>"; //1行目 s += "<tr><th>問題</th><th>成績</th></tr>"; for (n=0;n<qa.length;n++) { s += "<tr><td>" + (n+1) + "</td><td>" + ansers[n] + "</td><tr>"; } s += "</table>"; document.getElementById("text_q").innerHTML = s; //次の選択肢 s = "【<a href='javascript:history.back()'>前のページに戻る</a>】"; s += "【<a href='javascript:setReady()'>同じ問題を最初から</a>】"; s += "【<a href=''>次の問題に進む</a>】"; document.getElementById("text_s").innerHTML = s; } } </script> </body> </html>

自分で調べたことや試したこと

(追加)配列の中身を確認しました。
alert(qa[num]);
//問題文 トンボを英語にするとどれ?,fly,dragonfly,butterfly,2

alert(qa[count][num]); //答え tuna alert(ansers[count]); //×か○

(追加)
複数ファイルのダウンロードを許可が表示されます。
以下のコード追加で。

for (n=0;n<qa.length;n++) { s+=qa[num] + qa[count][num]; var blob =new Blob([s],{type:"text/csv"}); //配列に上記の文字列(s)を設定 var link =document.createElement('a'); link.href = URL.createObjectURL(blob); link.download ="tempdate.csv"; link.click(); }

(追加)
var str = "";
str += qa[count][num]+","; //カンマで区切る

(追加)
イメージ説明

(追加)関数を修正しました。
function anser(num) { //解答表示
var s;
s = (count + 1) + "問目:";

//alert(qa[count][q_sel + 1]);

//答え合わせ
if (num == qa[count][q_sel + 1]) {
//正解
ansers[count] = "○";
} else {
ansers[count] = s+qa[count][num];
// const arr=[];
// arr.push("Red", "Green", "Blue")

// alert(arr);

}

イメージ説明

配列のpushの使い方で悩んでいます。
function Seito(_namae, _seiseki) {
this.namae = _namae;
this.seiseki = _seiseki;
}
var kumi=[];
kumi[0]=new Seito(data1,95);
kumi[1]=new Seito(data2,73);
kumi[2]=new Seito(data3,86);
for(i=0;i<kumi.length;i++){
document.write(kumi[i].namae+":"+kumi[i].seiseki+"点<br>");
}

結果
const data1 = ansers[count]
const data2 = ['d', 'e', 'f'];

1問目:飛脚:95点
d,e,f:73点
d,e,f:86点

間違えた問題だけを連続でカンマ区切りで最終的にはすべての間違えた問題だけをCSVで
保存したいです。
よろしくお願いします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

yambejp

2022/04/07 09:33 編集

具体的にどういうCSVになればよいのですか?
BeatStar

2022/04/07 10:18

> 解答を配列で保存しようとしているけれどもうまくいかないです。 うまくいかない、とは? 状況によって変わります。それを「できない」とだけ言われても困りますよ。
believe

2022/04/07 10:56

間違えた解答を配列で一時保存してCSV形式ですべての間違えた問題だけを最終的にリンクからダウンロードさせたいです。 現状は問題を間違えると、「1問目:×河豚」と一件だけCSVで保存されます。 それを「1問目:×河豚,3問目:×starmine,4問目:×水星,-5問目---,--------]のような形式でtempdate.csvでダウンロードさせたいです。最後の問題を解き終えたときに。 よろしくお願いします。
yambejp

2022/04/07 11:01 編集

> 1問目:×河豚,3問目:×starmine,4問目:×水星,-5問目---,-------- これはCSV形式ではないですが? 問題番号と間違えた答えの組み合わせということですかね? (そもそも間違えだけ出力するなら×表示はいらないですね) "1問目","河豚" "3問目","starmine" "4問目","水星" ・・・・ って形式でよいのでしょうか? それと保存というのは保存用の確認ダイアログをだせばいいのでしょうか?
believe

2022/04/07 21:41

はい、"1問目","河豚" "3問目","starmine" "4問目","水星" ・・・・ って形式でいいです。 >それと保存というのは保存用の確認ダイアログをだせばいいのでしょうか? はい、最終的に確認ダイアログが出てほしいです。 よろしくお願いします。
believe

2022/04/08 23:51

>CSV出力のところ理解されたという前提でよろしいですね? 理解できていません。 現状では[配列1,配列1]となっています、 [配列1,配列2]にしたいのですが、for文の繰り返しが理解できていません、 1問目の答えが2つ続いた状態で表示されます。 [1問目の答え、2問目の答え]になっていません。 //間違えた問題を配列に入れる for (n=1;n<=1;n++) { //答え alert(qa[count][n]); //一問目 alert(s); //選択肢 alert(num); // var arr = [s]+qa[count][n]; //3問目:禍牛, 2問目:fly, //alert(arr); // let a1 = arr.concat(qa[count][num] +","); //console.log(a1); //=> [1, 2, 3, 4, 5, 6, 7] const arr=[]; arr.push(s,qa[count][num]); //2問目:,天王星 alert(arr); arr.push("Red", "Green", "Blue") for (var i = qa.length+1; i<=0; i++){ arr.push(s,qa[count][n]); } //arr[][i]; //2問目:,天王星,Red,Green,Blue alert(arr); よろしくお願いします。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。