- PR -

Columns.Expression=IIF関数 以外について

投稿者投稿内容
さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 2005-02-14 18:37
お世話になります。
Winアプリ
VB.NET
で開発をしています。

現在グリッドのあるカラムを,数値を元に文字列表示させるため

dtColumn = DsTest.Tables("NG").Columns(7)
dtColumn.Expression = "IIF(Kbn='0','資金不足',・・・・)

と調べたとおりにしているのですが,上記の「Kbn」が10程度あり,それらを全てIIF関数
で対処しようとすると可視性が悪い為,別の方法を取ろうと考えています。
一番簡単なのはデータセットに入れる時にに区分名をテーブルから取得しておき
それを元にFillすればとは思うのですが,Inputデータがフロッピーディスクにある
テキストファイルで読取自体に時間が掛かる為,極力避けたいと思っています。

(今以上に速度が落ちなければ)せめて可視性が良くなる方法があればとは
思うのですが何か良い手段(及び根本的な間違い)はありませんでしょうか?

宜しければご教授下さい。


中博俊
ベテラン
会議室デビュー日: 2004/10/17
投稿数: 91
お住まい・勤務地: 大阪市
投稿日時: 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
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2005-02-14 20:24
Choose 関数
--
でも本音を言うと、その手の区分リストはデータベースに持つべし
_________________
甕星 <mikahosi@abox9.so-net.ne.jp>
http://blogs.msmvp.jp/mikahosi/
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-02-14 21:41
 データセット使っているならデータテーブル作ってリンク張ればいいのでは?

 データテーブルのデータソースは、データベースだけじゃないですよ。
_________________
さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 2005-02-15 07:39
さかもとです。
中 博俊様,甕星様,Jitta様
ありがとうございました。

Select〜Case
Choose関数
ともに,可視性はよくなりますよねやはり・・・。
手を加えてみたいと思います。

>その手の区分リストはデータベースに持つべし

はい,おっしゃる通りで実際にテーブルにはちゃんと存在はします。
ただ,(作りが悪いとは思うのですが)業務上Inputデータはフロッピーから
直接読む(StreamReaderを利用)しかなく,又結構な件数となる為
1件1件読みながら・・・とか,一度テーブルに全部取り込んでからJoinして・・・
と検討もしたのですが,「表示完了までの時間を
極力短く」という要望に適わないかな?と思い最終手段にしています。
(顧客によってはIBMフォーマット⇒DOS 変換の処理がこの直前に入る為
尚更表示までの時間にこだわっていらっしゃいます)

>データテーブル作ってリンク張ればいいのでは?

こちらの方法は知りませんでした。早速調べてみます。

凄い方ばかりに返信を頂くと緊張しますね(笑)
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-02-15 09:11
じゃんぬねっと です。

引用:

業務上Inputデータはフロッピーから
直接読む(StreamReaderを利用)しかなく



え? フロッピから直接読んでるのですか...?
コピーしてからの方が、安全だと思うのですが...。

# って、昔の話なのかなぁ;
_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 2005-02-15 09:24
じゃんぬねっと様

そうです。今のところ各金融機関から全銀フォーマットで戻ってくる(IBMかDOSフォーマット)を内部のファイル名で判断させ,一致した場合だけ読み取るということになっています。

プログラムの中で一度コピーなどをしてコピー時にウイルスチェックをかけて・・・という
ことも必要なのでしょうが,「とにかく処理速度を!」ということが前提で(笑)
業務運用側としてもフロッピー以外の媒体に一度落とし込むなどをさせると現場での
セキュリティーが保てない(別のところに問題があるとは思うのですが・・・)との
ことでガチガチのアルミケースに入ったフロッピーを担当者間で厳重に手渡しするという汎用機時代の仕組みを極力変えず移行するということに落ち着いてしまいました。

早いところフロッピーをやめて電送式(これも古い呼び方ですよねー)に変えてくれれば
色々な面で便利なのですが,その費用がどうとか,ネットワーク上のセキュリティ構築の費用がどうとかこうとかで(笑)

歴史のあるシステム(とお客様)を移行させる苦労と技術力の低さ(私の)に頭を抱える
毎日です・・・。
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2005-02-15 12:05
コードに埋め込もうとする位だから、区分の数はそれほど多くないんでしょ?

多少最適化されるだろうけど、IIFやSelect Caseは条件分岐コードを生成するし、Chooseは毎度リストを構築しなおすことになります。これらは時間のかかる処理です。

配列のn番目を参照するような処理は、単純なアドレス演算でなりたっています。このほうが前述の条件分岐命令より圧倒的に早いです。またChooseと違ってリストの初期化と破棄のタイミングを自分でコントロールできます。したがって処理速度が問題なら、文字列配列を使うことをお勧めします。

文字列配列を初期化する時にはデータベースに存在するマスタを読み込んだほうが良いでしょう。実際にテーブルに存在するなら尚のこと、コードに埋め込んだ場合に保守性の低下のほうが問題では。

でもそこまで処理速度が問題になるかなぁ・・・。FDの場合にはそもそもFDDへのアクセス速度が大きなボトルネックになるし、コードレベルで最適化してもほとんど効果ないと思うんだけど。進行状況の表示とか、読み込めた分を逐次表示するとか、見せ方を工夫することでオペレータのストレスを減らす方向に考えたほうが良いと思う。
_________________
甕星 <mikahosi@abox9.so-net.ne.jp>
http://blogs.msmvp.jp/mikahosi/

スキルアップ/キャリアアップ(JOB@IT)