- ベストアンサー
動的CSVファイルから値なしを削除する方法
- jqueryを使用して動的なCSVファイルから特定の列を取り出し、値のないものを削除する方法について質問です。
- 要望は、値のないものを取り除いた後の結果を表示し、最終行から3つの値を取り出すことです。
- 質問者は、動的なCSVファイルの行数が変化するため、動的にデータを取得する方法を知りたいと考えています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#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に上げたとおりです。
その他の回答 (2)
- fujillin
- ベストアンサー率61% (1594/2576)
#2です。 >全く何も表示されず(IE、Firefox)、エラーすらも返されませんでした。 >もうお手上げです(T_T) #2の例のままで動作しないということでしょうか? (その場合は、エラー表示ぐらいは出ると思うのですが…) それとも、実装したら動かないということでしょうか? その場合は、#1、#2にも書きましたが、特に怪しそうなのはajaxでのデータの受け取り方あたりかと… (どのような実装なのかわかりませんので、ヤマカンですが)
お礼
失礼致しました。 自分の入力ミスで無事動作いたしました。 あとは自力で実装してみて頑張ってみます。 この度はご面倒をおかけしてすみませんでした。 もっと精進したいと思います。
- fujillin
- ベストアンサー率61% (1594/2576)
なんかよくわかってませんが… >最終的には最終行から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を使うのならこの部分でも利用した方が簡略化できそう・・・
お礼
すいません、自分の質問の文章やらコードがめちゃくちゃですね。 コードは途中の 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行目の最大値と最小値を求めています。 教えていただいたコードも考慮しながら、ちょっともう少し考えてみます。
お礼
文章の書き方が悪く、すみませんでした。 しかし、まさにやりたいことズバリ理解して頂けて嬉しいかぎりです。 で、早速例にならって実行してみましたが・・・ 全く何も表示されず(IE、Firefox)、エラーすらも返されませんでした。 もうお手上げです(T_T) お助けを・・・