• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:動的CSVファイルから値なしを削除したい)

動的CSVファイルから値なしを削除する方法

このQ&Aのポイント
  • jqueryを使用して動的なCSVファイルから特定の列を取り出し、値のないものを削除する方法について質問です。
  • 要望は、値のないものを取り除いた後の結果を表示し、最終行から3つの値を取り出すことです。
  • 質問者は、動的なCSVファイルの行数が変化するため、動的にデータを取得する方法を知りたいと考えています。

質問者が選んだベストアンサー

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

#1です。 「2行目以降のデータの2列目で有効な数値のうちの最大、最小値と最後の3個のデータを求める」 というものと勝手に解釈しました。 (仮変数がdataxなのに、yMax、yMinとxがyになっているのがよくわからないけれど…) 最終的に文字列が必要なのか個々のデータが必要なのかも不明ですが、とりあえずデータが取れればよいとして、 (全角空白は半角に) var rows = [  "day,sizeA,sizeB",  "11-19,90,254",  "11-20,247,261",  "11-21,312,258",  "11-24,149,250",  "11-25,360,215",  "11-26,a,450",  "11-27,110,196" ]; var result = []; var n; var datax; var yMin, yMax; for (n = rows.length-1; n > 0; n--) {  datax = parseInt(rows[n].split(",")[1]);  if(!isNaN(datax)){   if(result.length<3) result.unshift(datax);   yMin = yMin===undefined?datax:Math.min(yMin, datax);   yMax = yMax===undefined?datax:Math.max(yMax, datax);  } } alert(result.join(" ") + " / yMin=" + yMin + ",yMax=" + yMax); その他の気になった点は#1に上げたとおりです。

araragi99
質問者

お礼

文章の書き方が悪く、すみませんでした。 しかし、まさにやりたいことズバリ理解して頂けて嬉しいかぎりです。 で、早速例にならって実行してみましたが・・・ 全く何も表示されず(IE、Firefox)、エラーすらも返されませんでした。 もうお手上げです(T_T) お助けを・・・

その他の回答 (2)

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.3

#2です。 >全く何も表示されず(IE、Firefox)、エラーすらも返されませんでした。 >もうお手上げです(T_T) #2の例のままで動作しないということでしょうか? (その場合は、エラー表示ぐらいは出ると思うのですが…) それとも、実装したら動かないということでしょうか? その場合は、#1、#2にも書きましたが、特に怪しそうなのはajaxでのデータの受け取り方あたりかと… (どのような実装なのかわかりませんので、ヤマカンですが)

araragi99
質問者

お礼

失礼致しました。 自分の入力ミスで無事動作いたしました。 あとは自力で実装してみて頑張ってみます。 この度はご面倒をおかけしてすみませんでした。 もっと精進したいと思います。

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

なんかよくわかってませんが… >最終的には最終行から3つの値、「149 360 110」を取り出したい その他の必要なこともやっているみたいですが、何をしたいのかよくわからないので、この部分(↑)の処理の一例だけを。 有効な数字を後ろから3つとるということでよいのなら、後ろからテストしていったほうがよさそう。 なお、ご提示にならってparseInt()で数値化していますが、この場合、"119abc"などは数値として評価されます。  (全角空白は半角に) var rows = [  "day,sizeA,sizeB",  "11-19,90,254",  "11-20,247,261",  "11-21,312,258",  "11-24,149,250",  "11-25,360,215",  "11-26,,450",  "11-27,110,196" ]; var result = []; var n; var fields var datax; for (n=rows.length-1; n>0; n--) {  fields = rows[n].split(",");  datax = parseInt(fields[1]);  if(!isNaN(datax)) result.unshift(datax);  if(result.length>2) break; } alert(result.join(",")); ◇その他 >「90 247 312 149 360 NaN 110 yMin=90, yMax=360 」という値が返ってきます。 同じ処理を通すのなら、後ろの二つはNaNになりませんか?(最後の","はタイポと判断) for(){ ~~ } の中で n==0 を判断しているけれど、初期値がn=1なので常にfalseになるのでは? jQueryのgrep()は知りませんけれど、第一引数は配列なのでは? しかも function(e){ return e; } だと、多分0も除外だけれど意図通りなのだろうか? http://api.jquery.com/jQuery.grep/ ajaxでコールバックを用いていないようですが、タイミングが合わないのでは? また、どうせjQueryを使うのならこの部分でも利用した方が簡略化できそう・・・

araragi99
質問者

お礼

すいません、自分の質問の文章やらコードがめちゃくちゃですね。 コードは途中の var yMin = items[0][1]; for (var j = 1; j < n; j++) { if (items[0][j] < yMin) yMin = items[0][j]; if (items[0][j] > yMax) yMax = items[0][j]; } result += "yMin=" + yMin + ", yMax=" + yMax + "\n"; return result; が抜けていました。 2行目の最大値と最小値を求めています。 教えていただいたコードも考慮しながら、ちょっともう少し考えてみます。

関連するQ&A

専門家に質問してみよう