表部品から重複を探す

投稿者:よっしー 投稿日:2018/05/29(Tue) 17:11:24 No.2086

こんにちは、よっしーです

csvからデータを表部品に取り込み、編集させています。
その中で重複しているデータを検出したいのですが、

1列目の内容を表部品の行数回繰り返し、一覧に追加し
一覧を要素へそれぞれ繰り返して総アタックで検出は出来ますが
(何故か複数回取得して余分に{18,19}{18,19}となります。)

重複が1セットの場合はうまく表部品から消せますが
複数の場合は、表部品は1行ごとでしか消せない為失敗します。
(力技で2番目の19に+1して消すことは出来ますが...)


一覧は、{}
表部品1の行数回繰り返す
 重複検索は、表部品1の1列目から重複を探す
 重複検索を一覧へ追加
繰り返し終わり

一覧を表示
結果「18,19」


一覧は、{18,19,23,24}
一覧を要素へそれぞれ繰り返す
 表部品1の[要素]番目行目を消す
繰り返し終わり


上記のように簡易的に表部品上の重複データを検出する事と
表部品のデータを行単位で消す際に同時に複数消す良い方法はないでしょうか。
よろしくお願いいたします。

Re: 表部品から重複を探す

投稿者:アーク <info_nds-labo あっとまーくexcite.co.jp> 投稿日:2018/06/17(Sun) 15:25:43 No.2096

よっしーさん、こんにちは。アークです。

回答が付かないようですので僭越ながら私が良くやる方法を書きます。

表計算やデータベースでは重複検索は良く行う作業です。
その際は、私は隣の行と比較して同じならその場で削除します。
行数分繰り返すのは同じですが1回のループで終わります。

ループ処理の際に一つ前のデータと比較させて判断します。
この様にすると同じ内容のデータは一つだけ残ります。
勿論、ループ処理を開始する前にソートしておきます。
その場で削除したくない時はよっしーさんの様に配列に入れて、
後から何等かの処理をする事もできますよ。

以上、参考までに…。

Re^2: 表部品から重複を探す

投稿者:よっしー 投稿日:2018/06/18(Mon) 10:35:25 No.2099

アーク様

いつもありがとうございます。

なるほど
ループ中に比較しながら削除するとずれる事は無さそうですね
処理したい内容により動作を変えると幅広く使えそうです。

参考にさせて頂き、再度考え直してみます。
ありがとうございました。

参考までに…

投稿者:アーク <info_nds-labo あっとまーくexcite.co.jp> 投稿日:2018/06/18(Mon) 10:59:58 No.2100

よっしーさん、こんにちは。アークです。

比較検証するのが先頭のセルだったとして、
既にデータがソートされているものとすると、
大体、下記の様なコードになろうかと思います。

---------------------------------------------------------
  行番号を1からレコード数まで増やしながら繰り返す
    もし行番号=1なら
      手前セルは、「」
    そうでないなら
      手前セルは、表部品1の{[行番号]-1,1}セル目からセル部品を取得したもの
    もし終わり
    対象セルは、表部品1の{[行番号],1}セル目からセル部品を取得したもの
    もし対象セルの内容が手前セルの内容なら
      対象セルの内容を報告する
    もし終わり
  繰り返し終わり
---------------------------------------------------------

上記で「対象セルの内容を報告する」の部分をレコードを削除するように書き換えれば、
実際に削除されます。

以上、参考までに…。

Re: 参考までに…

投稿者:よっしー 投稿日:2018/06/18(Mon) 12:03:40 No.2101

アーク様

再度のご回答、例題コードありがとうございます。

繰り返す際に-1にならないよう、もしで分岐させる事は思いつきませんでした
いつもレコード数の範囲を超えているとエラーが出て困っておりました。

ただ、繰り返し中に表部品の行を削除すると範囲を超えてしまいますので
行番号を変数に代入し、繰り返し後に削除することにしました。

--------------------------------

行番号を削除へ追加
もし終わり
繰り返し終わり

ーー変数に代入した該当行を順番に削除
    表部品1から削除(1)行目を消す
    削除2は、{}
    削除の個数回、値を1から増やしながら繰り返す
      削除の[値]番目の内容-[値]を削除2へ追加
    繰り返し終わり
    
    削除の個数-1回、値を2から増やしながら繰り返す
      表部品1から[削除2の[値]番目の内容+1]行目を消す
    繰り返し終わり
    もし終わり
--------------------------------

ようやく解決の糸口が見えて参りました。
また行き詰った際は、よろしくお願い致します。

▲ページの先頭へ

- WebForum -