こんにちは。超初心者です。
サーバー上にあるcsvデータの最小値を求める方法が分かりません。
例えば、
【kagaku.csv】
年,考査,太郎,花子,つとむ
2009,期末,56,88,95
2010,中間,97,90,40
2010,期末,55,49,61
2011,中間,70,80,63
上記のようなcsvデータの「太郎」「花子」「つとむ」の最小値をブラウザで表示したいのです。
結果として、
太郎 55、花子 49、つとむ 40
のような表示が望ましいです。
出来たらjabascript、不可能ならCGIでの方法(コード記述)をご教授ください。
よろしくお願いいたします。
No.9ベストアンサー
- 回答日時:
Ajax ではありませんが、どうでしょう?
XMLHttpRequest が使えるブラウザで動かしてください。
--
> 専門の方でも少し面倒な作業が必要
私は、javascript だけ解答しているので「専門(?)」かもしれませんが、プロではありません。
それに面倒だと思ってもいません。それを見せるのがちょっと恥ずかしいだけ。
<!DOCTYPE html>
<title>TEST</title>
<body>
<script>
if(!Array.prototype.map)Array.prototype.map=function(b,e){var c=this.length;if(typeof b!="function")throw new TypeError;for(var d=Array(c),a=0;a<c;a++)a in this&&(d[a]=b.call(e,this[a],a,this));return d};
if(!Array.prototype.reduce)Array.prototype.reduce=function(d){var c=this.length;if(typeof d!="function")throw new TypeError;if(c==0&&arguments.length==1)throw new TypeError;var a=0;if(arguments.length>=2)var b=arguments[1];else{do{if(a in this){b=this[a++];break}if(++a>=c)throw new TypeError;}while(1)}for(;a<c;a++)a in this&&(b=d.call(null,b,this[a],a,this));return b};
var A =
(function (text) {
return text.split (/\r\n|\r|\n/g)
.reduce (
(function (a, b) {
return a.concat ([b.split (/\s*[,\t]\s*/)]);
}), []);
});
var B =
(function (ary) {
return ary.reduce (function (a, b) {
return b.map (function (c, i) {
return (isNaN (c))
? this[i]
: (isNaN (this[i]))
? Number (c)
: Math.min (Number (c), this[i])
}, a);
},
[]);
});
var C =
(function (a) {
return this[a];
});
var D =
(function (s, e) {
var result = [];
while (s < e)
result.push (s++);
return result;
});
var E =
(function (file) {
var text = null;
var req = new XMLHttpRequest;
if (req) {
req.open ('GET', file, false);
req.send (null);
text = (200 == req.status)
? req.responseText
: 'Error';
req = null;
}
return text;
});
var a = A (E('test.csv')); //←ここに指定ファイル
var b = B (a);
var c = D (2, a[0].length); // 3列目から最後まで
var d = [
c.map (C, a[0]),
c.map (C, b)
];
alert(d.join ("\n"));
</script>
すごいです!ちゃんと表示されました!!
こんな素人にお付き合い下さり、ありがとうございました。
これを機にコードの意味をもっと理解し、がんばって勉強したいと思います(^-^)/
No.5
- 回答日時:
#2です
CSVが、どのように変化しますか?具体的にお願い致します。最小値の計算はできています。
後は、どれをどう表示するかだけなのですが・・・
早々のお返事ありがとうございます!
CSVは入力フォームによって上書きされていきます。
項目の【年,考査,太郎,花子,つとむ】は変わりません。
その下の行が増えていくだけです。
例えば、【2012,期末,99,88,77】が追加されるといった感じです。
No.4
- 回答日時:
whileの中反復すんの忘れてた
<?php
echo(array_slice(csv_get_min_data(CSVファイル),2));
function csv_get_min_data($path){
$rtn=array();
$csv=fopen($path,'r');
$labels=fgetcsv($csv);
$len=count($labels);
$row=fgetcsv($csv);
for($i=0;$i<$len;$i++){
$rtn[$labels[$i]]=$row[$i];
}
while($row=fgetcsv($csv)){
for($i=0;$i<$len;$i++){
if($rtn[$labels[$i]]>$row[i]){
$rtn[$labels[$i]]=$row[i];
}
}
}
return $rtn;
}
?>
No.3
- 回答日時:
楽なのはCSV読み込みのメソッドが用意されてる
PHPだと思うのでPHPの場合も
<?php
echo(array_slice(csv_get_min_data(CSVファイル),2));
function csv_get_min_data($path){
$rtn=array();
$csv=fopen($path,'r');
$labels=fgetcsv($csv);
$len=count($labels);
$row=fgetcsv($csv);
for($i=0;$i<$len;$i++){
$rtn[$labels[$i]]=$row[$i];
}
while($row=fgetcsv($csv)){
if($rtn[$labels[$i]]>$row[i]){
$rtn[$labels[$i]]=$row[i];
}
}
return $rtn;
}
?>
PHPの場合は"00,000"なんてコンマが含まれた
文字列がある場合もちゃんと処理してくれるのでそういうとこで安全
だけど文字コードには注意
わぁっ!ありがとうございます!
しかしながら・・・PHPはまだ勉強していませんのでさっぱりです(ToT)
PHPのこともネットで調べてみたいと思います。
No.2
- 回答日時:
おはようございます。
> ライブラリを使わないなら頑張ってXMLHttpRequestをガリガリ書く ←とくにこれ
> 好きな形式でアウトプットする
は、どなたか心優しい方がきっと書いてくれるであろうことを期待します
<!DOCTYPE html>
<body>
<script>
if(!Array.prototype.map)Array.prototype.map=function(b,e){var c=this.length;if(typeof b!="function")throw new TypeError;for(var d=Array(c),a=0;a<c;a++)a in this&&(d[a]=b.call(e,this[a],a,this));return d};
if(!Array.prototype.reduce)Array.prototype.reduce=function(d){var c=this.length;if(typeof d!="function")throw new TypeError;if(c==0&&arguments.length==1)throw new TypeError;var a=0;if(arguments.length>=2)var b=arguments[1];else{do{if(a in this){b=this[a++];break}if(++a>=c)throw new TypeError;}while(1)}for(;a<c;a++)a in this&&(b=d.call(null,b,this[a],a,this));return b};
var CSV_text = "年,考査,太郎,花子,つとむ\n2009,期末,56,88,95\n2010,中間,97,90,40\n2010,期末,55,49,61\n2011,中間,70,80,63";
var pickup_list = [2,3,4];
var A =
(function (text) {
return text.split (/\r\n|\r|\n/g)
.reduce (
(function (a, b) {
return a.concat ([b.split (/\s*[,\t]\s*/)]);
}), []);
});
var B =
(function (ary) {
return ary.reduce (
function (a, b) {
return b.map (
function (c, i) {
return (isNaN (c))
? this[i]
: (isNaN (this[i]))
? Number (c)
: Math.min (Number (c), this[i])
}, a);
},
[]);
});
var C =
(function (a) {
return this[a];
});
var a = A (CSV_text);
var b = B (a);
var c = [
pickup_list.map (C, a[0]),
pickup_list.map (C, b)
];
alert(c.join ("\n"));
</script>
ありがとうございます!!
しかし、これだとCSVの中身が変わってしまうとその都度書き換えなければならないですよね…。
CSVが変化しても大丈夫なコードの書き方ってありますか?
No.1
- 回答日時:
htmlと同一ドメイン上にcsvファイルがあるならJavaScriptだけで可能です。
コードは…面倒なので、ポイントとなる部分だけ書いておきます。
1. Ajaxでファイルを読み込む(jQueryなら$.load。ライブラリを使わないなら頑張ってXMLHttpRequestをガリガリ書く)
2. 結果(文字列)を解析する。(改行でsplit、カンマでsplitすればよいでしょう。文字列はparseIntで数値に変換可能です。)
3. 最小値の計算をする。(まぁこれは問題ないでしょう。)
4. 好きな形式でアウトプットする。(alertで表示 or HTML内に表示 or console.logでコンソールに表示 ...)
#ちゃんとしたコードは、どなたか心優しい方がきっと書いてくれるであろうことを期待します。
http://semooh.jp/jquery/
http://webos-goodies.jp/archives/50548720.html
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) 20万行あるデータを動かしたい 2 2023/06/13 15:21
- Visual Basic(VBA) エクセルについて教えてください。 3 2023/06/28 09:11
- Visual Basic(VBA) VBAで特定の場所にあるCSVファイル(複数)から特定場所を抜き出してExcelに転記したいです。 11 2023/05/23 16:29
- Visual Basic(VBA) VBA初心者です。電話番号の数字の前に0を表示させたいです。 2 2022/12/14 03:58
- Excel(エクセル) CSVファイルがカンマ区切りにならない。対処法を教えていただきたいです。 仕事でSMS一斉送信ができ 2 2022/07/01 21:24
- MySQL 【MySQL】本当に困っているので、助けてください。よろしくお願いします。 3 2023/06/03 14:24
- Excel(エクセル) PowerQueryに詳しい方教えてください(Office365) 1 2022/07/24 21:11
- Excel(エクセル) エクセルでcsvファイルを開いてVBAを使いたい 7 2022/04/28 11:12
- Excel(エクセル) csvに別のExcelの文章を差し込む 2 2023/04/01 16:06
- その他(プログラミング・Web制作) データ解析ソフトRでのファイル入力read.csvがエラーになります 7 2022/03/27 22:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラムについて。
-
スマホ上で、左右スワイプで次...
-
初心者です。gulpでコンパイル...
-
プログラムがうまく動きません...
-
jsで質問です。 displayプロパ...
-
【Google Apps Script】「ライ...
-
console.logがどうしても2つ機...
-
指定時間になったら、WEBサイト...
-
Googleフォームで選択肢に応じ...
-
セレクトを全て選択されていな...
-
イラストレーター、縦中横のシ...
-
sessionStorageを調べています。
-
コードレビューをお願いします。
-
セレクトボックスで配列を呼び...
-
jsで、配列内の文章を改行する...
-
jQueryで同じクラス名のものを...
-
HTMLタグに複数のクラスを設定...
-
コードレビューをお願いします。
-
IndexedDB を使ってファイルア...
-
画面遷移を行わずに同一ページ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
var exports = exports || {}; ...
-
HTMLタグに複数のクラスを設定...
-
jsで質問です。 displayプロパ...
-
画面遷移を行わずに同一ページ...
-
Googleフォームで選択肢に応じ...
-
特定の文字列を複数抜き出した...
-
フロントエンドフレームワーク...
-
変数名をどのようにつけるのが...
-
【JS】selectでchangeした時の...
-
React hooksが値を返して配列変...
-
オブジェクトから任意のプロパ...
-
指定時間になったら、WEBサイト...
-
Colorboxがうまく設置できません
-
二次元配列の中の各行の要素を...
-
読み込んだQRコードをフォーム...
-
IndexedDB を使ってファイルア...
-
HTMLで作った時報アプリが動き...
-
GASに文字列として関数を入れる...
-
GASでGoogleフォームの自動返信...
-
①入力フォーム→②確認表示画面→③...
おすすめ情報