複数キーを利用したソートの仕方に関して(VB6.0)

このQ&Aのポイント
  • VB6.0でCSVファイルを内部データとして読み込み、複数キーを利用したソートをするプログラムの開発方法を教えてください。
  • 現在のプロバイダは並べ替え、またはフィルタリングに必要なインターフェースをサポートしておらず、ソートを命令するとエラーが表示されています。
  • MSDASQL.1を利用していたが、テキストファイルの読み込みには問題なく利用できたため、ソートに問題がある可能性があります。ソートの方法を教えてください。
回答を見る
  • ベストアンサー

複数キーを利用したソートの仕方に関して(VB6.0)

普段はROMばかりですがお世話になっております。 この度CSVファイル(カラム10個、レコード10000件程度)を内部データとして 読み込み複数キーを利用したソートをするプログラムの開発を VB6.0にて行う事になったのですがどうもうまくいかないのです。 いままではOracleを利用していて複数キーのソートなどSQLで 行っていたのでいざプログラムでやれと言われてもさっぱり 分かりません。。。 VBもまだ3日目で関数を探すので精一杯です。(愚痴ってごめんなさい) 今現在はADOを利用した開発を考えています。 mCn.ConnectionStringの設定は Provider=MSDASQL.1 Extended Properties="" DRIVER={Microsoft Text Driver (*.txt; *.csv)}; としています。 この状態ではCSVのインポートまではうまくいくのですがSortを命令すると 「実行時エラー3251:現在のプロバイダは並べ替え、またはフィルタリングに必要な インターフェースをサポートしていません」 とエラーが表示されてしまいます。 逆引きなど参考書等でテキストファイルを読み込む際にはMSDASQL.1を利用していた為、そのまま利用していたのが悪かったのでしょうか? どなたか複数キーを利用したソートの方法をご存知でしたら是非お教えいただきたくよろしくお願いいたします。 不備・不明点等ありましたらレスでお願いいたします。 失礼いたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • todo36
  • ベストアンサー率58% (728/1234)
回答No.1

試してないが.. strSQL = "select * from csvファイル名 order by 項目名1, 項目名2"

r_homma
質問者

お礼

本日、色々と環境をいじった結果うまくデータを抽出することが出来ました。 todo36さんありがとうございました。 これからも精進いたします。^^

r_homma
質問者

補足

ご助言ありがとうございます。 今回のCSVファイルに関しては項目名が指定されていなく mRs.Fields(0)のようにレコードセットのフィールド番号をorder by句に 指定してみたのですがうまくデータを取得できませんでした。 Providerの設定項目は何でも良いのでしょうか? 何かお気づきの点がありましたらお教えください。 不明点等ございましたらご連絡ください。 よろしくお願いいたします。

関連するQ&A

  • wshでcsvファイルのソートを行いたい

    wshのプログラムで困っているため教えてください。 wshでcsv(カンマ区切り)のファイルのソートを行い、Escel形式で保存するプログラムを書いています。 調べてみたところ、wshではソート関数がないようで、 adodbのsort関数を使用して対処しようとしていますが、どうもうまくいきません。 (※adodbの必要はないのですが、ExcelVBAのsortのコードを書こうとするとエラーになってしまったので、adodbにしています。) <仕様> csvファイルのソートのキーになるのは、「判定区分」の値で昇順に行いたいです。 csvファイルの一行目は、カラム名としてソート対象にはなりません。 読み込んだcsvファイルをexcel形式に保存したいです。 ■csvファイルの形式は、以下のような形です。 性別,年代,判定区分,生年月日,日付 女性,10,0,2010/01/10,2013/7/7 23:57 男性,50,2,2000/03/30,2013/7/7 13:7 女性,10,0,1990/01/20,2013/7/7 15:22 女性,20,1,2001/12/10,2013/7/7 8:10 *----------------------------------- <ソース> Set con = CreateObject("ADODB.Connection") With con .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Path & ";" _ & "Extended Properties='text;HDR=Yes;FMT=Delimited'" .Open End With Set rec = CreateObject("ADODB.Recordset") rec.Open "select * from " & csvfile & " order by 判定区分", con *----------------------------------- うまくいかないため ↓でも書いています。 *----------------------------------- Const adDate = 7 Const adVarChar = 200 Dim ans Set objADO = CreateObject("ADODB.Connection") Set rs = CreateObject("ADODB.Recordset") Set re = CreateObject("VBScript.RegExp") rs.Fields.Append "性別", adVarChar, 255 rs.Fields.Append "年代", adVarChar, 255 rs.Fields.Append "判定区分", adVarChar, 255 rs.Fields.Append "生年月日", adDate rs.Fields.Append "日付", adDate rs.Open ans = "" rs.Sort ="判定区分 ASC" rs.MoveFirst Do While Not rs.EOF ans = ans & rs.Fields(0).Value & vbCrLf rs.MoveNext Loop MsgBox ans エラーになってしまいます。 ソート処理だけですでににっちもさっちもいかないため、教えていただきたいです。 どうぞ宜しくお願いいたします。

  • 文字列3次元配列のソート(複数キー)について教えてください

    皆様こんにちは。 ソートについて悩んでおります。 以下の様な表イメージで配列を持っており (実際は要素数は動的に変わります) char AAA[10000][20][10]; /*(10000行20列10文字)*/ これを列毎のキーで昇順/降順と並び替えるプログラムを Cにて実現させたいのですが 検索して調べても2次元はよく載っているのでが、 複数列となるとなかなか無くて、お手上げ状態です。 ・qsortは使えない。 ・安定するソート法にてやらないといけなさそう というのはなんとなく理解できるのですが..... 良い方法をご存知の方いらっしゃいましたら、よろしくお願います。

  • Javaのソートに関する質問です。

    Javaのソートに関する質問です。 CSVから取得したデータの一つをキーとして降順にソートしたいのでしょうが、どのような方法が効果的でしょうか?関数が利用できるのであれば関数を使用したいのですが。。。 データの詳細を以下に記載します。 環境 JavaSE5.0 CSVデータ ※ソート条件 ・キー内容は「wwwwwwww-xxxxxxxx-yyyyyyyy-zzzzzzzz」という形式で、 「wwwwwwww」が1番、「xxxxxxxx」が2番、というように、左側の数値が優先されます。 (ソート前)キー内容 タイトル 11111111-22222222-33333333-4444444 テスト1 22222222-33333333-44444444-5555555 テスト2 11111111-00000000-22222222-3333333 テスト3 22222222-44444444-55555555-6666666 テスト4 (ソート後)キー内容 タイトル 11111111-00000000-22222222-3333333 テスト3 11111111-22222222-33333333-4444444 テスト1 22222222-33333333-44444444-5555555 テスト2 22222222-44444444-55555555-6666666 テスト4

  • EXCEL2000 複数行のソート方法について

    EXCEL2000 複数行のソート方法について教えて下さい。 EXCELのVBA(マクロ)にて、シート上の複数行をソートしたいと考えています。 エクセル上では、3つの行に対してソートができるのは知っています。 その操作をマクロに記録して、そのVBAを変更して5つの行に対して ソートを一括で行おうとしたのですが、エラーとなってしまいました。。。 以下が記録したVBAです =================================================================== Selection.Sort Key1:=Range("C15"), order1:=xlAscending, _ key2:=Range("G15"), order2:=xlAscending, key3:=Range("h15"), order3:=xlAscending, _ header:=xlGuess, ordercustom:=1, MatchCase:=False, Orientation:= _ xlTopToBottom, sortmethod:=xlPinYin =================================================================== このVBAを変更して3つ以上の行に対して一括でソートは出来るでしょうか? この方法ではやはり無理でしょうか? VBAを2つに分けてやる方法は最後の策だと考えています。 それ以前に2つに分けて出来るのか分からないのですが。。。 知恵をかして下さい。宜しくお願い致します。

  • VB6.0⇒VB2008のコンバートについて

    ある端末でVB6.0のプログラムをVB2008へコンバートしました。 その後、別のVB6.0がインストールされていない端末でプログラムを実行しようとしたところ、"COMExceptionはハンドルされませんでした。"とエラーが発生しました。 上記のコンバートしたプログラムではソケット通信でwinsockを利用していました。 そのためプログラムを修正して、winsockを利用しないようにしたところ、エラーがなく実行できました。 おそらく、VB6.0がインストールされていない事が原因だと思うのですが、いまいちわかりません。 どなたかご教授お願いします。

  • Perlのソートについて

    ハッシュを利用して今ソートできるプログラムを作成したのですが、 重複するデータは除外されてしまうようで、どうしたら除外されずに ソートできるかを教えていただきたいです。 <例> 文字 よみ  No      橋  はし  1      橋  はし  3      箸  はし  2 というデータがあったとして、今のプログラムを実行すると・・・ <結果> 箸  はし  2 キーがよみなので3番目のデータだけ残ります。キーを漢字に したとしても1番目のデータは残らないのですが、どうしてらよいのでしょうか。 <理想的な結果>      橋  はし  1      箸  はし  2      橋  はし  3 一番いいのが上のような結果で、Excelのソートのような感じで、第1キーはよみで第2キーはNoとかのソートはPerlでできないでしょうかね?? どなたか分かる方がいたら教えていただきたいです。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • javaのソートについて。

    うまく文章で伝えられないかもしれませんがお願いします。 csvファイルの中に 名前、住所、電話番号、アドレス と入った一文が複数あるとします。 これを名前の50音順に並べたいのですが、 文字でもArrays.sortでソートは可能でしょうか? 一応やってみたのですがうまくいきませんでした。 さらに質問なんですが私はこのcsvファイルの一文を削除したり、変更したりというプログラムを作っています。 変更や削除の場合は一度配列に全ての文を入れてその後削除、変更を行った後に またファイルに書き込むという形をとっています。 この場合50音順に並べるには一度書き込みが終った後もう一度読み込んでソートをして 書き込みなおすしか方法はないのでしょうか? ご教授お願いします。

    • ベストアンサー
    • Java
  • VB6で特定のファイルを閉じたい

    VB6ですでに存在しているcsvファイルに書き込みをするプログラムを作っているのですが、 書き込みしたいcsvファイルが開いているとエラーになって書き込みができません。 なので、「書き込みしたいファイルが開いているか判定」して、 「開いている場合は閉じたい」のですが、どうすれば良いでしょうか? 開いているファイルはVB6で開いたのではなくて、ユーザーが開いたファイルになります。

  • VB.net

     今までACCESSでしか開発をしていなかった、一般企業のシステム部門の下っ端です。  今回、MySQLとVB.NETを利用して、商品管理システムを作成しようと考えています。  まず、ある程度MySQLの基本的な部分を勉強し、テーブルを作成して、旧システムでACCESSが持っていたデータを一旦CSVに保管して、インポート....といった具合にマスターとなるデータを作りました。  そこで、今度はそのデータをVBで操作してみようと思ったのですが、VB.NETからMySQLへ接続できません。  サーバーエクスプローラーで、どのプロバイダをつかってみても、エラーが出てしまいます。  せめて、どのプロバイダをしようしたら良いのか、分かればよいのですが。 また、VB6で行われていたのをちらっと拝見した覚えがあるのですが、プログラムで接続可能なら、そちらもご教授願えると、とても助かります。  長々とした質問で分かり難いかと思いますが、どなたか、教えていただけないでしょうか?

  • sortコマンドについて

    いつもお世話になっております。 sortコマンドについて質問させて下さい。 現在UNIXコマンドのsortによってファイルをソートしようとしています。 ソート対象となるファイルは下記の通りです。 ファイルの種類:csvファイル ファイルサイズ:80MByte 1レコード長:48Byte レコード数:120万レコード レコード例: 2,1000 ,1,10C0,15,0000000100000000000000000000000000000000 2,1117 ,1,10B0,16,0000000300000000000000000000000100000000 ・ ・ ・ そこで下記のようなコマンドにてソートしています。 sort -t, -k 1,1 -k 2,2 -k 3,3 -k 4,4 < fileA.csv > fileB.csv すると「sort:0653-657ソート中に書込みエラーが発生しました。」と出力され中断してしまいます。 自分なりにsortコマンドについて調べてみたところ、 /usr/tmpディレクトリのファイルシステムがいっぱいになることでコマンドが失敗しているようです。 (一時的にそのディレクトリにソート内容を展開しているようでした) 社内にて/usr/tmpディレクトリのファイルシステムの拡張を求めたところ「できない」と言われてしまいました。 開発の最終段階でのボリュームテストを行ったときの障害でしたので、 処理を大幅に変更するような対処は出来ない状況です。 代替方法などありましたらご教示頂きたいと思います。 以上、宜しくお願い致します。