プロが教えるわが家の防犯対策術!

ただいまVBScriptを勉強中です。よろしくお願いします。
たとえば、以下のようなカンマ区切りのテキストがあるとして、
お菓子のレコードがダブったときに3列目の『高い』を優先して
出力する方法はありますでしょうか?
言語はVBScriptでお願いします。

<テキストファイル例>
お菓子,001A,高い
お水,002A,安い
お菓子,001A,安い
ご飯,003A,高い


<出力ファイル例>
お菓子,001A,高い
お水,002A,安い
ご飯,003A,高い

A 回答 (3件)

度々回答していますが、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です。
ここでの大小は文字列の比較結果になりますが、"高い">"安い"なので結果は一致します。
但し、他の基準を用いる場合は集合関数を工夫しなければなりません。
    • good
    • 0

本件はレコード処理でしょうが、VBScriptは苦手ではないでしょうか。


全データを2次元配列に持って・・というようなのは非現実的だし、ソートメソッドも見つからない。
ーー
レコード間の重複を発見するロジックはどうするか
最初から、最後まで1レコードにつきN回比較すればわかるのだが、ロジックとしてプログラマは嫌うもののはず。
私なら「お菓子」列でソートして、毎レコードを読む都度直前のデータと比較し、同じなら捨てる。
それ以外はSQLのDISTINCTなどの方式しか思い浮かばない。
しかしVBScriptではしにくそうだ。
結局CSVファイルはそういうときに扱いにくくて、エクセル・アクセスなりに各列各行に読み込ませてVBAで処理せざるを得ないのでは。
>言語はVBScriptでお願いします
手足を縛って泳げという風な、データベース的な全体を知らない人の言うことやVBscriptの学習のための課題のための問題ではないかな。
---
無理にVBScriptでやるなら
VBScriptのReadLineで1行読み
Splitでカンマで区切る。これで2次元配列にデータが入る。
そこで自作ソートプログラムでソートして、私の前述したロジックで
重複を見つける。
その他に、現在行以後の全データ比較して重複を見つける
などを行う。
VBScriptの特有のDictionaryを応用する手も気になるが、使えるか判らない。
    • good
    • 0

そのテキストデータはどの程度あるのでしょう?



1行ごとに読み込んで 『お菓子』『001A』『高い』などに分割して配列に記憶しておき
これを検索をかけて重複する物のフラグを設定
全ての項目をチェックしえ終えたら フラグを見ながら出力
といった具合でしょう
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています