- 締切済み
VBScriptで重複レコードを削除して出力したいのですが…
ただいまVBScriptを勉強中です。よろしくお願いします。 たとえば、以下のようなカンマ区切りのテキストがあるとして、 お菓子のレコードがダブったときに3列目の『高い』を優先して 出力する方法はありますでしょうか? 言語はVBScriptでお願いします。 <テキストファイル例> お菓子,001A,高い お水,002A,安い お菓子,001A,安い ご飯,003A,高い … <出力ファイル例> お菓子,001A,高い お水,002A,安い ご飯,003A,高い …
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- nda23
- ベストアンサー率54% (777/1415)
度々回答していますが、CSVならADOを使って簡単に処理できます。 接続オブジェクトの作り方や参照のし方は下記URLを参照してください。 http://okwave.jp/qa3991018.html SQLは以下のようになります。 SELECT F1,Max(F2),Max(F3) FROM C:\xx~\yy.csv GROUP BY F1 これは第1フィールドでグループ化し、第2、3フィールドは大きい物を採用するSQLです。 ここでの大小は文字列の比較結果になりますが、"高い">"安い"なので結果は一致します。 但し、他の基準を用いる場合は集合関数を工夫しなければなりません。
- imogasi
- ベストアンサー率27% (4737/17069)
本件はレコード処理でしょうが、VBScriptは苦手ではないでしょうか。 全データを2次元配列に持って・・というようなのは非現実的だし、ソートメソッドも見つからない。 ーー レコード間の重複を発見するロジックはどうするか 最初から、最後まで1レコードにつきN回比較すればわかるのだが、ロジックとしてプログラマは嫌うもののはず。 私なら「お菓子」列でソートして、毎レコードを読む都度直前のデータと比較し、同じなら捨てる。 それ以外はSQLのDISTINCTなどの方式しか思い浮かばない。 しかしVBScriptではしにくそうだ。 結局CSVファイルはそういうときに扱いにくくて、エクセル・アクセスなりに各列各行に読み込ませてVBAで処理せざるを得ないのでは。 >言語はVBScriptでお願いします 手足を縛って泳げという風な、データベース的な全体を知らない人の言うことやVBscriptの学習のための課題のための問題ではないかな。 --- 無理にVBScriptでやるなら VBScriptのReadLineで1行読み Splitでカンマで区切る。これで2次元配列にデータが入る。 そこで自作ソートプログラムでソートして、私の前述したロジックで 重複を見つける。 その他に、現在行以後の全データ比較して重複を見つける などを行う。 VBScriptの特有のDictionaryを応用する手も気になるが、使えるか判らない。
- redfox63
- ベストアンサー率71% (1325/1856)
そのテキストデータはどの程度あるのでしょう? 1行ごとに読み込んで 『お菓子』『001A』『高い』などに分割して配列に記憶しておき これを検索をかけて重複する物のフラグを設定 全ての項目をチェックしえ終えたら フラグを見ながら出力 といった具合でしょう