- - PR -
Columns.Expression=IIF関数 以外について
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-02-14 18:37
お世話になります。
Winアプリ VB.NET で開発をしています。 現在グリッドのあるカラムを,数値を元に文字列表示させるため dtColumn = DsTest.Tables("NG").Columns(7) dtColumn.Expression = "IIF(Kbn='0','資金不足',・・・・) と調べたとおりにしているのですが,上記の「Kbn」が10程度あり,それらを全てIIF関数 で対処しようとすると可視性が悪い為,別の方法を取ろうと考えています。 一番簡単なのはデータセットに入れる時にに区分名をテーブルから取得しておき それを元にFillすればとは思うのですが,Inputデータがフロッピーディスクにある テキストファイルで読取自体に時間が掛かる為,極力避けたいと思っています。 (今以上に速度が落ちなければ)せめて可視性が良くなる方法があればとは 思うのですが何か良い手段(及び根本的な間違い)はありませんでしょうか? 宜しければご教授下さい。 | ||||
|
投稿日時: 2005-02-14 18:50
こんにちは中です。
素直に public function xxxfnc() as string select case (kbn) case 0 return "資金不足" case 1 return "燃料不足" end select end function でしょう _________________ 中博俊 MSMVP Visual Studio C# Since 2004/04-2005/03, MCP http://naka.wankuma.com/ http://blogs.wankuma.com/naka/ naka@wankuma.com | ||||
|
投稿日時: 2005-02-14 20:24
Choose 関数
-- でも本音を言うと、その手の区分リストはデータベースに持つべし _________________ 甕星 <mikahosi@abox9.so-net.ne.jp> http://blogs.msmvp.jp/mikahosi/ | ||||
|
投稿日時: 2005-02-14 21:41
データセット使っているならデータテーブル作ってリンク張ればいいのでは?
データテーブルのデータソースは、データベースだけじゃないですよ。 _________________ | ||||
|
投稿日時: 2005-02-15 07:39
さかもとです。
中 博俊様,甕星様,Jitta様 ありがとうございました。 Select〜Case Choose関数 ともに,可視性はよくなりますよねやはり・・・。 手を加えてみたいと思います。 >その手の区分リストはデータベースに持つべし はい,おっしゃる通りで実際にテーブルにはちゃんと存在はします。 ただ,(作りが悪いとは思うのですが)業務上Inputデータはフロッピーから 直接読む(StreamReaderを利用)しかなく,又結構な件数となる為 1件1件読みながら・・・とか,一度テーブルに全部取り込んでからJoinして・・・ と検討もしたのですが,「表示完了までの時間を 極力短く」という要望に適わないかな?と思い最終手段にしています。 (顧客によってはIBMフォーマット⇒DOS 変換の処理がこの直前に入る為 尚更表示までの時間にこだわっていらっしゃいます) >データテーブル作ってリンク張ればいいのでは? こちらの方法は知りませんでした。早速調べてみます。 凄い方ばかりに返信を頂くと緊張しますね(笑) | ||||
|
投稿日時: 2005-02-15 09:11
じゃんぬねっと です。
え? フロッピから直接読んでるのですか...? コピーしてからの方が、安全だと思うのですが...。 # って、昔の話なのかなぁ; _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2005-02-15 09:24
じゃんぬねっと様
そうです。今のところ各金融機関から全銀フォーマットで戻ってくる(IBMかDOSフォーマット)を内部のファイル名で判断させ,一致した場合だけ読み取るということになっています。 プログラムの中で一度コピーなどをしてコピー時にウイルスチェックをかけて・・・という ことも必要なのでしょうが,「とにかく処理速度を!」ということが前提で(笑) 業務運用側としてもフロッピー以外の媒体に一度落とし込むなどをさせると現場での セキュリティーが保てない(別のところに問題があるとは思うのですが・・・)との ことでガチガチのアルミケースに入ったフロッピーを担当者間で厳重に手渡しするという汎用機時代の仕組みを極力変えず移行するということに落ち着いてしまいました。 早いところフロッピーをやめて電送式(これも古い呼び方ですよねー)に変えてくれれば 色々な面で便利なのですが,その費用がどうとか,ネットワーク上のセキュリティ構築の費用がどうとかこうとかで(笑) 歴史のあるシステム(とお客様)を移行させる苦労と技術力の低さ(私の)に頭を抱える 毎日です・・・。 | ||||
|
投稿日時: 2005-02-15 12:05
コードに埋め込もうとする位だから、区分の数はそれほど多くないんでしょ?
多少最適化されるだろうけど、IIFやSelect Caseは条件分岐コードを生成するし、Chooseは毎度リストを構築しなおすことになります。これらは時間のかかる処理です。 配列のn番目を参照するような処理は、単純なアドレス演算でなりたっています。このほうが前述の条件分岐命令より圧倒的に早いです。またChooseと違ってリストの初期化と破棄のタイミングを自分でコントロールできます。したがって処理速度が問題なら、文字列配列を使うことをお勧めします。 文字列配列を初期化する時にはデータベースに存在するマスタを読み込んだほうが良いでしょう。実際にテーブルに存在するなら尚のこと、コードに埋め込んだ場合に保守性の低下のほうが問題では。 でもそこまで処理速度が問題になるかなぁ・・・。FDの場合にはそもそもFDDへのアクセス速度が大きなボトルネックになるし、コードレベルで最適化してもほとんど効果ないと思うんだけど。進行状況の表示とか、読み込めた分を逐次表示するとか、見せ方を工夫することでオペレータのストレスを減らす方向に考えたほうが良いと思う。 _________________ 甕星 <mikahosi@abox9.so-net.ne.jp> http://blogs.msmvp.jp/mikahosi/ |