excelとかの重複データをカウントしたい
2011/01/28
やりたいことは下記。
りんご
みかん
りんご
きうい
りんご
みかん
みかん
りんご
きうい
りんご
みかん
↓↓↓
りんご 3
みかん 2
きうい 1
色々調べたけど途中で力尽きた。
だから、javascriptに力を借りることに。
流れとして、入力したデータをユニークにする。次にカウント。最後に出力。
とりあえずサンプル。
excelとかの重複データを含めてカウントする
※firefoxでしか動作チェックしていません。
入力したデータをユニークにする
ちょっと詳細にすると、重複していないユニーク値をキーに連想配列作成。値は全部数値で「0」。
- // カウントしたいデータ
- exlVal = new Array(‘りんご’,’みかん’,’りんご’,’きうい’);
- unqAry = new Array();
- for( i=0; i<exlVal.length; i++ ){
- if( exlVal[i] != “” ){
- if( i == 0 ){
- uKey = exlVal[i];
- unqAry[uKey] = 0;
- }else{
- same = 0;
- sLop:for( j=0; j<unqAry.length; j++ ){
- if( exlVal[i] == unqAry[j] ){
- same = 1;
- break sLop;
- }
- }
- if( same == 0 ){
- uKey = exlVal[i];
- unqAry[uKey] = 0;
- }
- }
- }
- }
これで、下記のような連想配列ができる。
unqAry[‘りんご’] = 0
unqAry[‘みかん’] = 0
unqAry[‘きうい’] = 0
unqAry[‘みかん’] = 0
unqAry[‘きうい’] = 0
次にカウント
元データをキーに「+1」する。
- for( i=0; i<exlVal.length; i++ ){
- if( exlVal[i] != “” ){
- uKey = exlVal[i];
- unqAry[uKey]++;
- }
- }
これで、結果になる。
unqAry[‘りんご’] = 2
unqAry[‘みかん’] = 1
unqAry[‘きうい’] = 1
unqAry[‘みかん’] = 1
unqAry[‘きうい’] = 1
最後に出力
excelにコピペするようにタブ切りにしておく。
連想配列の値とキーを両方を出力したいから、「for in」を使う。
今回の場合、「unqAry」という配列のキーを「k」とする的な感じ(?)にすると下記のようになる。
- tmpVal = “”;
- for ( var k in unqAry ){
- tmpVal += k + “\t” + unqAry[k] + “\n”;
- }
サンプルです
excelとかの重複データを含めてカウントする
※firefoxでしか動作チェックしていません。
オリジナルのソースは下記。
- <script type="text/javascript"><!–
- function outputTEXT(){
- tmpForm = document.getElementById('iptForm'); //<form id="xxxx">の読み込み
- // 値
- if( tmpForm.exlDat.value != "" ){
- exlVal = tmpForm.exlDat.value.split("\n");
- }else{
- alert("データがはいっていない");
- return false;
- }
- // ユニークのみ連想配列にし、値を0。
- unqAry = new Array();
- for( i=0; i<exlVal.length; i++ ){
- if( exlVal[i] != "" ){
- if( i == 0 ){
- uKey = exlVal[i];
- unqAry[uKey] = 0;
- }else{
- same = 0;
- sLop:for( j=0; j<unqAry.length; j++ ){
- if( exlVal[i] == unqAry[j] ){
- same = 1;
- break sLop;
- }
- }
- if( same == 0 ){
- uKey = exlVal[i];
- unqAry[uKey] = 0;
- }
- }
- }
- }
- // カウントしていく。
- for( i=0; i<exlVal.length; i++ ){
- if( exlVal[i] != "" ){
- uKey = exlVal[i];
- unqAry[uKey]++;
- }
- }
- // キーと値を出力
- tmpVal = "";
- tblVal = "";
- for ( var k in unqAry ){
- tblVal += k + "\t" + unqAry[k] + "\n";
- }
- rTAG = '';
- rTAG += '<hr>' + "\n";
- rTAG += '<textarea>' + "\n";
- rTAG += tblVal;
- rTAG += '</textarea>' + "\n";
- document.getElementById("outBox").innerHTML = rTAG;
- }
- </script>
- <h2>データを記載</h2>
- <form name="iptForm" id="iptForm" action="#">
- ▼データをコピペして、「カウント」ボタンを押す<br>
- <textarea id="exlDat" style="width:99%;height:10em;"></textarea><br>
- <br>
- <input type="submit" name="submit" value="カウント" onClick="outputTEXT();return false;">
- <input type="reset"><br>
- </form>
- <div id="outBox"></div>
- <hr>
- <a href="https://tips.recatnap.info/">PCスキルの小技・忘却防止メモ</a>