節電対策ということで、jquery+csvで簡易電力メーターを作成中で、
以下のような単純なCSVを読み込むものは動作するようになりました。
電力量を読み込んで、画像の長さに反映しています。
///////////
<CSV(現在の時間帯の電力使用量)>
733
<スクリプト>
$(function(){
$.get("sample.csv",{}, createGraph);
});
function createGraph(gData){
var gPoint = gData.split(",");
var htmlText = "";
for (var i=0; i<gPoint.length; i++){
htmlText = htmlText + '<img src="bar.gif" width="'+gPoint[i]/4+'" height="30">';
}
$("#chart").html(htmlText);
}
///////////
が、以下のようなCSVに対応する場合には、
・最終行の3列目
を指定して読み込む必要があるとおもうのですが、
どのような方法や考え方をするとよいのでしょうか?
<CSV(1時間ごとの電力使用量)>
2011/3/14,22:00,742,594,23.5
2011/3/14,23:00,738,594,23.6
2011/3/15,0:00,733,592,24.6
No.3ベストアンサー
- 回答日時:
>サンプルを単純化して、以下の様にしてみました。
まあ、それが良いならそれでいいですが(笑
必要な内容を消すことは単純化とはいいませんよ。
>最終行を読み込むにはどのようにするとよいのでしょうか?
以下の行がそうです。
var lastdata = lines[(lines.length - 1)].split(",");
gDataの中には、
2011/3/14,22:00,742,594,23.5
2011/3/14,23:00,738,594,23.6
2011/3/15,0:00,733,592,24.6
などのデータがはいっています。
これを行ごとに分割します。
var lines = gData.split("\r\n");
linesには各行のデータが入っています。
lines[0] = "2011/3/14,22:00,742,594,23.5";
lines[1] = "2011/3/14,23:00,738,594,23.6";
lines[2] = "2011/3/15,0:00,733,592,24.6";
行数を調べるには、
lines.length
とします。
lines.lengthの値は3ですが、配列は0から始まるので、
lines.length - 1
にした番号が最終行の配列キーになりますよね。
よって、
lines[(lines.length - 1)];
には、
2011/3/15,0:00,733,592,24.6
が入ります。
それを列に分割しなければなりません。
.split(",");
を追加し、
var lastdata = lines[(lines.length - 1)].split(",");
としています。
この時点でlastdataには
lastdata[0] = "2011/3/15";
lastdata[1] = "0:00";
lastdata[2] = "733";
lastdata[3] = "592";
lastdata[4] = "24.6";
となっています。
ただ
var htmlText = '<img src="bar.gif" width="'+lastdata[2]/4+'" height="30">';
と書いても最終行のデータしか掲載されませんよ。
全体をループさせ、各行ごとに表示させないと。
私のソースじゃ、そうしているんですけどねえ。
なぜわざわざ消したのか...わからない。
No.6
- 回答日時:
<!DOCTYPE html>
<title></title>
<style type="text/css">
meter {
width:300px;
border-width:50px;
}
</style>
<h1>東北電力</h1>
<div id="hoge"> </div>
<h1>東京電力</h1>
<div id="hoge2"></div>
<script>
function view (data) {
var no = 0;
var obj;
var rec;
var html = '';
var day;
data.reverse ();
while (obj = data[no++]) {
day = new Date (obj.created_at);
rec = obj.text.replace (/,/g, '').match (/([-+]?[0-9.]+)/g);
if (rec.length == 12) continue;
dt = rec[0] + ':' + rec[1] + '-' + rec[2] + ':' + rec[3];
html += '<li>' + dt + '<meter high="90" max="100" value="' + rec[6] +
'"> 電力使用率:'+rec[6]+' % </meter> '+rec[4]+'万kW / '+rec[5]+'万kW</li>';
}
document.getElementById ('hoge').innerHTML = '<ol>'+ html + '</ol>';
}
function view2 (data) {
var no = 0;
var obj;
var rec;
var html = '';
var day;
data.reverse ();
while (obj = data[no++]) {
day = new Date (obj.created_at);
rec = obj.text.replace (/,/g, '').match (/([-+]?[0-9.]+)/g);
if (rec) {
dt = day.getDate () + ' ' + day.getHours () + ':00';
html += '<li>' + dt + '<meter high="90" max="100" value="' + rec[2] +
'"> 電力使用率:'+rec[2]+' % </meter> '+rec[1]+'万kW / '+rec[4]+'万kW</li>';
}
}
document.getElementById ('hoge2').innerHTML = '<ol>'+ html + '</ol>';
}
</script>
<script src="http://api.twitter.com/1/statuses/user_timeline. …
</script>
<script src="http://api.twitter.com/1/statuses/user_timeline. …
</script>
No.5
- 回答日時:
src がきえてた。
てきとうにほせいして//api.twitter.com/1/statuses/user_timeline.json?screen_name=setsudensan&count=24&callback=view"></script>
No.4
- 回答日時:
よくよくかんがえたら、ぜんぜんこたえになってなかった。
<!DOCTYPE html>
<title></title>
<style type="text/css">
meter {
width:300px;
}
</style>
<h1>東京電力</h1>
<div id="hoge"></div>
<script>
function view (data) {
var no = 0;
var obj;
var rec;
var html = '';
var day;
data.reverse ();
while (obj = data[no++]) {
day = new Date (obj.created_at);
rec = obj.text.replace (/,/g, '').match (/([-+]?[0-9.]+)/g);
dt = day.getDate () + ' ' + day.getHours () + ':00';
html += '<li>' + dt + '<meter high="90" max="100" value="' + rec[2] +
'"> 電力使用率:'+rec[2]+' % </meter> '+rec[1]+'万kW / '+rec[4]+'万kW</li>';
}
document.getElementById ('hoge').innerHTML = '<ol>'+ html + '</ol>';
}
</script>
<script src="http://api.twitter.com/1/statuses/user_timeline. …
No.2
- 回答日時:
節電対策ということなのでのってみました。
日付、時間もimgの幅に入ってしまいますよ。
カンマ区切りでOKなら、以下の感じでどうでしょうか。
<script type="text/javascript"><!--
$(function(){
$.get("sample.csv",{}, createGraph);
});
function createGraph(gData){
var lines = gData.split("\r\n");
var lastdata = lines[(lines.length - 1)].split(",");
var htmlText = "<p>現在の時間帯の電力使用量 : "+lastdata[2]+"</p>";
for (var i = 0; i < lines.length; i++){
if(lines[i] == ""){continue;}
var gPoint = lines[i].split(",");
htmlText += "<p>"+gPoint[0]+" "+gPoint[1]+"</p>";
for (var ii=2; ii < gPoint.length; ii++){
htmlText += '<div><img src="bar.gif" width="'+gPoint[ii]/4+'" height="30"></div>';
}
}
$("#chart").html(htmlText);
}
--></script>
<div id="chart"></div>
統計みたいなら最終行から読み込んだほうが良い気もしますけどね(^^;
あと$.getだとIEとか結構キャッシュされちゃうと思うので、頻繁に更新するならキャッシュさせないようにした方が良いかも。
この回答への補足
早速のご回答ありがとうございます。
サンプルを単純化して、以下の様にしてみました。
<script type="text/javascript">
<!--
$(function(){
$.get("sample.csv",{}, createGraph);
});
function createGraph(gData){
var lines = gData.split("\r\n");
var lastdata = lines[(lines.length - 1)].split(",");
var htmlText = '<img src="bar.gif" width="'+lastdata[2]/4+'" height="30">';
$("#chart").html(htmlText);
}
-->
</script>
CSVの1行目の3列目を読み込むようになりました!
lastdata[2] というところで、3列目を指定しているのですね。(?)
それで、CSVなんですが最新データが最終行に追加されるようで、
最終行を読み込むにはどのようにするとよいのでしょうか?
var lastdata = lines[(lines.length - 1)].split(",");
の辺りで、行数を分析しているのかな?と想像してみたのですが、
Javascriptのリファレンスを見ると列を分析しているような感じで、
ちょっと詰まってしまいました。
よろしくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- Visual Basic(VBA) マクロを教えてください。 7 2023/06/01 19:47
- Visual Basic(VBA) VBAで出力したCSVファイルの先頭にカンマを挿入したい 5 2022/10/14 12:20
- Excel(エクセル) PowerQueryに詳しい方教えてください(Office365) 1 2022/07/24 21:11
- その他(プログラミング・Web制作) データ解析ソフトRでのファイル入力read.csvがエラーになります 7 2022/03/27 22:11
- その他(プログラミング・Web制作) Sikulix2.0.5(Jython2.7.3)でcsvを読込WEB検索条件にpasteで文字化け 1 2023/03/31 11:02
- PHP htmlで複数の個数入力欄を表示させるには 1 2022/09/20 03:11
- Excel(エクセル) CSVファイルでVBAを動かす方法 3 2023/04/04 10:22
- JavaScript javascriptで変数を組み込みたい 2 2023/01/13 09:52
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JavaScriptで決まった「時刻」...
-
google apps scriptの終了のさせ方
-
javascriptでiframeのURL変更は?
-
翌月を取得するGASが分かりません
-
ASP.NETのコントロールの値をJa...
-
VSCODE[Python]の設定について
-
1日1回だけ引けるjavascriptお...
-
jqGridについて
-
イラストレーターでドキュメン...
-
シンプルなweb版スタンプラリー...
-
C# 演算 分岐処理 繰り返し処理
-
ページの先頭へスクロールして...
-
ジェネレーターの作り方
-
C#OpenCv V4にのエラーに関する...
-
GASでundefinedエラーが出ます
-
C# 演算 奇数と偶数 表現の仕方
-
【javascript】正規表現で括弧...
-
なぜmatchメソッドがエラーにな...
-
Javascriptで、以下の様な足し...
-
カンマで終わってるのはセミコ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
var exports = exports || {}; ...
-
google apps scriptの終了のさせ方
-
C#OpenCv V4にのエラーに関する...
-
GASでundefinedエラーが出ます
-
ジェネレーターの作り方
-
GASでGoogleフォームの自動返信...
-
HTMLで作った時報アプリが動き...
-
javascriptでテーブルに追加し...
-
html javascript リンク先アド...
-
【西暦等の変換】
-
ローカルにあるファイルを検索...
-
ASP.NETのコントロールの値をJa...
-
なぜmatchメソッドがエラーにな...
-
翌月を取得するGASが分かりません
-
gas スプレッドシートがアクテ...
-
ASP.NET MVCでObjectをjsに渡す
-
カンマで終わってるのはセミコ...
-
JavaScriptで文字列の特定文字...
-
javascriptでiframeのURL変更は?
-
APIを使って埋め込んだグーグル...
おすすめ情報