• ベストアンサー

CSVから読み込んだデータの保持とソート

お世話になっています。VB.NET+CSVに関する質問です。 現在VB.NETで、CSVから読み込んだレコードをある項目を基準に並び替え、一覧にして画面に表示するというプログラムを作っています。 こういう場合のCSVから読み込んだデータの保持の方法と、その並び替えの方法にはどういうやり方がありますか? いくつかのパターンがあると思いますが、教えてください。 以下はCSVの情報です。 ・1行が1件のレコード ・項目1を昇順で並び替える ・CSV項目:項目1(半角英数字)項目2(タブ)項目3(半角・全角文字) ・CSV件数:1000行以下

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

  • ベストアンサー
回答No.4

すみません、ANo.3です。 もうちょっと書いておいた方が良いかもしれませんね。 私が書いている方法では、まずは、例えば構造体の配列等にCSVの内容を入れておきます。 で、IComparerを持つクラスの中で、比較したい構造体の「メンバを指定」しつつ (ここが単純なSortメソッドでは不可能)比較し、大小関係を <0、=0、>0 で 指定してやれば良いです。 但しその際、Compareメソッド内で、比較する2値(Object型)を、該当の構造体に 変換してからでないと、比較できません。 CTypeかDirectCastで変換は可能かと思います。 …このぐらい書いておけば大丈夫かな?

augoogoo
質問者

お礼

回答ありがとうございます。 IComparerとても参考になりました。 ただ結局DataGridViewとDataTableの組み合わせで作ることになりました。

その他の回答 (4)

  • nfushi
  • ベストアンサー率31% (39/122)
回答No.5

No.1です。 ADO.NETが使えない制約って結構つらいですね。 では別解。 ・SortedDictionary<string, List<string>>にデータを格納する。 第一引数が項目1の値で、List<string>にCSV項目を格納。 ・VS2008ならList<string>にCSVデータを格納してLINQでSortする。 これでどうしょうか?

参考URL:
http://www.atmarkit.co.jp/fdotnet/dotnettips/429dictionary/dictionary.html
augoogoo
質問者

お礼

回答ありがとうございます。 DataGridViewとDataTableの組み合わせで作ることになりました。

回答No.3

下のURLなんかが参考になるかもです。 配列のソート方法を自分で設定する方法です。 2値の比較方法をIComparerインターフェイスを持つ自作クラスに定義し、 そのインスタンスをArray.Sortメソッドの第2引数にする事で、 自由にソート方法を定義できます。 ヘルプからも、ある程度の情報は取得できると思いますので、参照してみてください。

参考URL:
http://www.atmarkit.co.jp/fdotnet/dotnettips/215arraysort/arraysort.html
  • hotosys
  • ベストアンサー率67% (97/143)
回答No.2

SortedやSortのあるListboxやDataGridViewに読み込めは保持も並び替えも表示もできる。

augoogoo
質問者

お礼

回答ありがとうございます。 DataGridViewとDataTableの組み合わせで作ることになりました。

  • nfushi
  • ベストアンサー率31% (39/122)
回答No.1

私ならADO.NETで処理すると思います。 SQLで取得していたら並び替えが楽だと思います。 集計関数を使えるのもメリットになるでしょう。 VB.NETで処理しているサイトのリンクを張っておきます。 ご参考に。

参考URL:
http://park5.wakwak.com/~weblab/selectTextFile.html
augoogoo
質問者

お礼

回答ありがとうございます。 大変参考にななりました。ただ書き忘れていたんですが、 今回のプログラムではADO.NETを使うことができません。 それ以外の方法を教えてもらえると助かります。

関連するQ&A

専門家に質問してみよう