<?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>Program全般</title><link>http://blogs.wankuma.com/mrt/category/1479.aspx</link><description>Program全般</description><managingEditor>Mr.T</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>Mr.T</dc:creator><title>COBOLは怖い？</title><link>http://blogs.wankuma.com/mrt/archive/2008/04/04/131638.aspx</link><pubDate>Fri, 04 Apr 2008 12:16:00 GMT</pubDate><guid>http://blogs.wankuma.com/mrt/archive/2008/04/04/131638.aspx</guid><wfw:comment>http://blogs.wankuma.com/mrt/comments/131638.aspx</wfw:comment><comments>http://blogs.wankuma.com/mrt/archive/2008/04/04/131638.aspx#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://blogs.wankuma.com/mrt/comments/commentRss/131638.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/mrt/services/trackbacks/131638.aspx</trackback:ping><description>&lt;p&gt;私の職場には、現役COBOLerさんがいて毎日元気にソースを書いているのですが、&lt;/p&gt; &lt;p&gt;その人たちと仕事の話をしているとどうしても「うん」と云えないときがあります。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;それは、「なんのためらいもなく、ソースを修正するという前提で考えている」ということです。&lt;/p&gt; &lt;p&gt;また、それを前提としたシステム設計になっているのも信じられません。&lt;/p&gt; &lt;ul&gt; &lt;li&gt;「あ、このコードが追加になったから」とソースを直す。もちろん、マスタテーブルはなく、プログラムへの埋め込み。&lt;/li&gt; &lt;li&gt;マジックナンバー、マジックコードはあたりまえ。&lt;/li&gt; &lt;li&gt;相応のマスタ変更や個別対応用のバッチ実行などではなく、ソース変更→プログラム実行であること。&lt;/li&gt; &lt;li&gt;変更によるリスクは特にないと思っている。&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;とてもではないですが、怖すぎます。&lt;/p&gt; &lt;p&gt;昔のCOBOLだとHost自体のHD容量とかにも制限があった、メモリも潤沢じゃなかった、という制限があったのはわかりますが、&lt;/p&gt; &lt;p&gt;それにしたって、「この処理をするときは、毎年ソースにちょっと手を加えて、確認してから実行してね」的な思想・風潮があったんでしょうか？&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;動くところがあったら、壊れる機会も多くなるって法則がある。（私がつくった）&lt;/p&gt; &lt;p&gt;ソースってのは、直したらそんだけテストしなくちゃならない、どこにも影響がないということを確かめないといけない、&lt;/p&gt; &lt;p&gt;そのためにどんだけ仕事をしなくちゃならないのか。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;でも、私はちょっとした仕様変更もあっさり受けます。それが社内SEの強みだと思ってますしが、上のようなやつは&lt;/p&gt; &lt;p&gt;「必要ではないはずの仕事」です。&lt;/p&gt; &lt;p&gt;なぜかシステムに自分が従属してしまっているなんてのは、いやだ。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/mrt/aggbug/131638.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Mr.T</dc:creator><title>VisualBasic 2008の新機能 IFが変わった</title><link>http://blogs.wankuma.com/mrt/archive/2008/03/13/127492.aspx</link><pubDate>Thu, 13 Mar 2008 09:51:00 GMT</pubDate><guid>http://blogs.wankuma.com/mrt/archive/2008/03/13/127492.aspx</guid><wfw:comment>http://blogs.wankuma.com/mrt/comments/127492.aspx</wfw:comment><comments>http://blogs.wankuma.com/mrt/archive/2008/03/13/127492.aspx#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://blogs.wankuma.com/mrt/comments/commentRss/127492.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/mrt/services/trackbacks/127492.aspx</trackback:ping><description>&lt;p&gt;Mr.Tです、こんにちは。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;いや、これはすごい&lt;/p&gt; &lt;p&gt;やってくれたよ、こんなのをサポートしたのね。&lt;/p&gt; &lt;p&gt;ネタ元：&lt;a title="http://blogs.msdn.com/vbteam/archive/2008/03/11/if-operator-a-new-and-improved-iif-sophia-salim.aspx" href="http://blogs.msdn.com/vbteam/archive/2008/03/11/if-operator-a-new-and-improved-iif-sophia-salim.aspx"&gt;http://blogs.msdn.com/vbteam/archive/2008/03/11/if-operator-a-new-and-improved-iif-sophia-salim.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;（注意：以下は翻訳ではないですよ）&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;今までC#、C++などで使えていた3項演算子である（？）は、ショートサーキット評価による演算で、&lt;br&gt;かなり便利だなぁと思われていたものです。&lt;/p&gt; &lt;p&gt;それが、VBでも利用できるようになりました。すばらしい。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;ショートサーキット評価ってのは、簡単にいえば、&lt;/p&gt; &lt;p&gt;True Or (変数A = 変数B)&lt;/p&gt; &lt;p&gt;という式があった場合、変数A=変数Bを評価しなくても、式の結果はTrueになりますから、&lt;/p&gt; &lt;p&gt;わざわざ 変数A=変数Bを内部で評価しませんよ、というものです。&lt;/p&gt; &lt;p&gt;逆にいえば、ショートサーキットであれば、Trueパートだろうが、Flaseパートだろうが、「内部で評価されてしまう」&lt;/p&gt; &lt;p&gt;わけですね。&lt;/p&gt; &lt;p&gt;関数IIFだと、ショートサーキットではありません。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;使い方は、こうです。&lt;/p&gt; &lt;div class="SourceBox"&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;IF（判定式,Trueパート,Falseパート)&lt;/p&gt; &lt;p&gt;もしくは、&lt;/p&gt; &lt;p&gt;IF（Trueパート、Falseパート） &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;いや、すごいね、3項演算子から、判定式まで省略できるように進化してしまったよ！&lt;/p&gt; &lt;p&gt;#っていうか、ぶっちゃけそこまでいらねー&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;3項演算については、もうだいたいわかっている機能なんですが、2項演算になってしまったというか、&lt;/p&gt; &lt;p&gt;&lt;strong&gt;IF（Trueパート、Falseパート）&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;なによ、これ？&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;MSDNで検索。&lt;/p&gt; &lt;p&gt;&lt;a title="http://msdn2.microsoft.com/en-gb/library/bb513985(ja-jp).aspx" href="http://msdn2.microsoft.com/en-gb/library/bb513985(ja-jp).aspx"&gt;http://msdn2.microsoft.com/en-gb/library/bb513985(ja-jp).aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Boolean 引数を省略するときは、1 番目の引数に参照型または null 許容型を指定する必要があります。1 番目の引数が Nothing と評価されると、2 番目の引数の値が返されます。それ以外のすべての場合は、1 番目の引数の値が返されます。次の例は、この評価がどのように動作するのかを示します。&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;つまり、判定する式と値が一体化してしまったような形ですね。判定対象はNothingになります。&lt;/p&gt; &lt;p&gt;注意するのが、1番目の引数が参照型もしくは、Null許容型でなくちゃならないってことでしょうか。&lt;/p&gt; &lt;p&gt;#使い道がわからん &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt; ネタ元のコメントには、？が使いたいならC#を使えば？とか、かいてあったり、これイイヨ！とか、賛否両論&lt;/p&gt; &lt;p&gt;な感じですが、私は素直に喜べる機能じゃないかと思ってます。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/mrt/aggbug/127492.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Mr.T</dc:creator><title>CustomValidatorを使って複合サーバコントロールに検証用のイベントを追加する</title><link>http://blogs.wankuma.com/mrt/archive/2008/03/05/126397.aspx</link><pubDate>Wed, 05 Mar 2008 14:37:00 GMT</pubDate><guid>http://blogs.wankuma.com/mrt/archive/2008/03/05/126397.aspx</guid><wfw:comment>http://blogs.wankuma.com/mrt/comments/126397.aspx</wfw:comment><comments>http://blogs.wankuma.com/mrt/archive/2008/03/05/126397.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/mrt/comments/commentRss/126397.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/mrt/services/trackbacks/126397.aspx</trackback:ping><description>&lt;p&gt;Mr.Tです、こんにちは。 &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;ネタ元：&lt;a title="http://www.ailight.jp/blog/kazuk/archive/2008/02/22/14491.aspx" href="http://www.ailight.jp/blog/kazuk/archive/2008/02/22/14491.aspx"&gt;http://www.ailight.jp/blog/kazuk/archive/2008/02/22/14491.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt; ValidatorをASPXファイルに書いていると、やたらと行数を稼いでしまって、なんだか見難いようにも&lt;/p&gt; &lt;p&gt;おもってました。&lt;/p&gt; &lt;p&gt;今回は、今のプロジェクトで利用しているカスタムのコントロールに検証機能を追加するようにしてみたものです。&lt;/p&gt; &lt;p&gt;#コントロールは、プロジェクトで使用する製品CDのようなコード群をTextBox形式で扱うためのコントロールです。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;入力値は必ずチェックをするものなので、基本チェックは何をしなくてもValidして欲しい、&lt;/p&gt; &lt;p&gt;更に、必要であれば個別にValidate処理を実装できるようにする必要がありました。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;div class="SourceBox"&gt; &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Protected&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Overrides&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Sub&lt;/font&gt; CreateChildControls()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nameTextBox = &lt;font color="blue"&gt;New&lt;/font&gt; TextBox&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nameTextBox.ID = NameTextBoxID&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nameTextBox.Width = &lt;font color="blue"&gt;Me&lt;/font&gt;.NameWidth&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nameValidator = &lt;font color="blue"&gt;New&lt;/font&gt; CustomValidator&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;With&lt;/font&gt; nameValidator&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .ID = NameValidatorID&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .ValidationGroup = _validateGroupName&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Text = &lt;font color="#c00040"&gt;"*"&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;With&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;AddHandler&lt;/font&gt; nameValidator.ServerValidate, &lt;font color="blue"&gt;AddressOf&lt;/font&gt; OnServerValid&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Controls.Clear()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Controls.Add(nameTextBox)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Controls.Add(nameValidator)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Sub&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Private&lt;/font&gt; _targetServerValidateEventArgs &lt;font color="blue"&gt;As&lt;/font&gt; ServerValidateEventArgs&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Public&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Sub&lt;/font&gt; NameBoxValidate()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Me&lt;/font&gt;.EnsureChildControls()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _targetServerValidateEventArgs = &lt;font color="blue"&gt;New&lt;/font&gt; ServerValidateEventArgs(nameTextBox.Text, &lt;font color="blue"&gt;False&lt;/font&gt;)　...(*1)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Me&lt;/font&gt;.OnTextServerValidate(&lt;font color="blue"&gt;Me&lt;/font&gt;, _targetServerValidateEventArgs)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nameValidator.IsValid = _targetServerValidateEventArgs.IsValid&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Sub&lt;/font&gt; &lt;/p&gt;&lt;font color="green"&gt;'サーバ上での基本Valid処理&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Private&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Sub&lt;/font&gt; OnServerValid(&lt;font color="blue"&gt;ByVal&lt;/font&gt; source &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Object&lt;/font&gt;, &lt;font color="blue"&gt;ByVal&lt;/font&gt; events &lt;font color="blue"&gt;As&lt;/font&gt; ServerValidateEventArgs)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;If&lt;/font&gt; ************ &lt;font color="blue"&gt;Then&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; events.IsValid = &lt;font color="blue"&gt;False&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nameValidator.ErrorMessage = Resources.****&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Else&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; events.IsValid = &lt;font color="blue"&gt;True&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nameValidator.ErrorMessage = &lt;font color="blue"&gt;String&lt;/font&gt;.Empty&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;If&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Sub&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Private&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Shared&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;ReadOnly&lt;/font&gt; EventTextServerValidateKey &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Object&lt;/font&gt; = &lt;font color="blue"&gt;New&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Object&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Public&lt;/font&gt; Custom &lt;font color="blue"&gt;Event&lt;/font&gt; TextServerValidate &lt;font color="blue"&gt;As&lt;/font&gt; ServerValidateEventHandler&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;AddHandler&lt;/font&gt;(&lt;font color="blue"&gt;ByVal&lt;/font&gt; value &lt;font color="blue"&gt;As&lt;/font&gt; ServerValidateEventHandler)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Events.&lt;font color="blue"&gt;AddHandler&lt;/font&gt;(EventTextServerValidateKey, value)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;AddHandler&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;RemoveHandler&lt;/font&gt;(&lt;font color="blue"&gt;ByVal&lt;/font&gt; value &lt;font color="blue"&gt;As&lt;/font&gt; ServerValidateEventHandler)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Events.&lt;font color="blue"&gt;RemoveHandler&lt;/font&gt;(EventTextServerValidateKey, value)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;RemoveHandler&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;RaiseEvent&lt;/font&gt;(&lt;font color="blue"&gt;ByVal&lt;/font&gt; sender &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Object&lt;/font&gt;, &lt;font color="blue"&gt;ByVal&lt;/font&gt; e &lt;font color="blue"&gt;As&lt;/font&gt; ServerValidateEventArgs)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;CType&lt;/font&gt;(Events(EventTextServerValidateKey), ServerValidateEventHandler).Invoke(&lt;font color="blue"&gt;Me&lt;/font&gt;, e)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;RaiseEvent&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Event&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Protected&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Overridable&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Sub&lt;/font&gt; OnTextServerValidate(&lt;font color="blue"&gt;ByVal&lt;/font&gt; source &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Object&lt;/font&gt;, &lt;font color="blue"&gt;ByVal&lt;/font&gt; e &lt;font color="blue"&gt;As&lt;/font&gt; ServerValidateEventArgs)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Dim&lt;/font&gt; validateHandler &lt;font color="blue"&gt;As&lt;/font&gt; ServerValidateEventHandler = &lt;font color="blue"&gt;CType&lt;/font&gt;(Events(EventTextServerValidateKey), ServerValidateEventHandler)&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; EnsureChildControls()&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nameValidator.Validate()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;If&lt;/font&gt; EventTextServerValidateKey IsNot &lt;font color="blue"&gt;Nothing&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Then&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; validateHandler(&lt;font color="blue"&gt;Me&lt;/font&gt;, e)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;If&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Sub&lt;/font&gt; &lt;br&gt;&lt;/div&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;ASPX側では、&lt;/p&gt; &lt;p&gt;Protected Sub 個別Valid(byval sender as Object,byval e as ServerValidateEventArgs) handles CustomControl.TextServerValidate &lt;/p&gt; &lt;p&gt;&amp;nbsp; ほにゃらら～&lt;/p&gt; &lt;p&gt;　ここで独自のチェックができるぞよ～&lt;/p&gt; &lt;p&gt;end Sub&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;そんなに難しいわけじゃないんですが、OnServerValidの呼び出しの際、ServerValidateEventArgsオブジェクトのパラメータを &lt;p&gt;どうするべと悩んだのはないしょです。 &lt;p&gt;Clickイベントなどであれば、EventArgs.Emptyをパラメータとして渡せばよいわけですが、今回は、ServerValidateEventArgsなので、 &lt;p&gt;ServerValidateEventArgs.Emptyを渡せません。 &lt;p&gt;そんなら、インスタンスを渡せばええんかいな～と調べてみて、 &lt;p&gt;&lt;a title="http://msdn2.microsoft.com/en-gb/library/system.web.ui.webcontrols.servervalidateeventargs.servervalidateeventargs(ja-jp,VS.80).aspx" href="http://msdn2.microsoft.com/en-gb/library/system.web.ui.webcontrols.servervalidateeventargs.servervalidateeventargs(ja-jp,VS.80).aspx"&gt;http://msdn2.microsoft.com/en-gb/library/system.web.ui.webcontrols.servervalidateeventargs.servervalidateeventargs(ja-jp,VS.80).aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;ここで、Valueと、IsValidを指定すればよいことがわかったので、そのまま&lt;strong&gt;(*1)&lt;/strong&gt;実装。&lt;/p&gt; &lt;p&gt;で、渡したパラメータに対して、CustomValidatorコントロールのIsValidに結果をわたせばいいです。&lt;/p&gt; &lt;p&gt;検証コントロールなんかなくなってしまって、いい感じです。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/mrt/aggbug/126397.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Mr.T</dc:creator><title>チェックルーチンの書き方？</title><link>http://blogs.wankuma.com/mrt/archive/2008/02/29/125674.aspx</link><pubDate>Fri, 29 Feb 2008 18:27:00 GMT</pubDate><guid>http://blogs.wankuma.com/mrt/archive/2008/02/29/125674.aspx</guid><wfw:comment>http://blogs.wankuma.com/mrt/comments/125674.aspx</wfw:comment><comments>http://blogs.wankuma.com/mrt/archive/2008/02/29/125674.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.wankuma.com/mrt/comments/commentRss/125674.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/mrt/services/trackbacks/125674.aspx</trackback:ping><description>&lt;p&gt;Mr.Tです、こんにちは。 &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;例えば、データの整合性についてのチェックルーチンを書くとき、&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;div class="SourceBox"&gt; &lt;p&gt;Private Function チェック1() as Boolean&lt;/p&gt; &lt;p&gt;　　整合性パターン１のチェック()&lt;/p&gt; &lt;p&gt;　　整合性パターン２のチェック()&lt;/p&gt; &lt;p&gt;　　整合性パターン３のチェック()&lt;/p&gt; &lt;p&gt;　　整合性パターン４のチェック()&lt;/p&gt; &lt;p&gt;End Function &lt;/p&gt;&lt;/div&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;ってかいてるんですが、&lt;/p&gt; &lt;p&gt;もう一つ、別のチェック２、３をかかなくちゃならないとき、&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;div class="SourceBox"&gt; &lt;p&gt;Private Function チェック2() as Boolean  &lt;p&gt;　　整合性パターン１のチェック()  &lt;p&gt;　　整合性パターン２のチェック()  &lt;p&gt;　　整合性パターン４のチェック()  &lt;p&gt;End Function  &lt;p&gt;Private Function チェック３() as Boolean  &lt;p&gt;　　整合性パターン１のチェック()  &lt;p&gt;　　整合性パターン２のチェック()  &lt;p&gt;　　整合性パターン５のチェック()  &lt;p&gt;End Function &lt;/p&gt;&lt;/div&gt; &lt;p&gt;今のところ、こうやってベタに書いてます。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;そういうときに、整合性パターン１のチェック、と整合性パターン２のチェック、を一つのFunctionniにまとめてみたりしたこともあったのですが、&lt;/p&gt; &lt;p&gt;そういう場合は、そのFunction名の名前付けに悩みます。&lt;/p&gt; &lt;div class="SourceBox"&gt; &lt;p&gt;Private Function 整合性パターン１と２（） as Boolean  &lt;p&gt;　　整合性パターン１のチェック ()  &lt;p&gt;　　整合性パターン２のチェック ()  &lt;p&gt;End Function  &lt;p&gt;&amp;nbsp; &lt;p&gt;Private Function チェック1() as Boolean  &lt;p&gt;　　整合性パターン１と２ ()  &lt;p&gt;　　整合性パターン３のチェック()  &lt;p&gt;　　整合性パターン４のチェック ()  &lt;p&gt;End Function  &lt;p&gt;Private Function チェック2() as Boolean &lt;/p&gt; &lt;p&gt;&lt;/p&gt;　　整合性パターン１と２()  &lt;p&gt;　　整合性パターン４のチェック()  &lt;p&gt;End Function  &lt;p&gt;Private Function チェック３() as Boolean  &lt;p&gt;　　整合性パターン１と２()  &lt;p&gt;　　整合性パターン５のチェック()  &lt;p&gt;End Function &lt;/p&gt;&lt;/div&gt; &lt;p&gt;なにしろ、そのまとめ方というのは、単なる同じ記述だから、というだけのもので、くくりだすにしても、適当な名前がつけられるものでは&lt;/p&gt; &lt;p&gt;ないからです。（連番なんてのはポイだ）&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;整合性パターンのチェック１と２は、互いに関係があるものではなく、単純に処理が一緒だから、まとめたというだけです。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;まとめる＝ソースの量を減らせる &lt;/p&gt; &lt;p&gt;ではあるんですが、ある程度大きくなったソースになれば関係ないように思うんです。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;それよりも大切なのは、Function名がいかに適切な名前であるかです。&lt;/p&gt; &lt;p&gt;くくりだすことで、チェック１～３の可読性が低くなるなら、それはやめたほうがよいのだろうと思ってます。&lt;/p&gt; &lt;p&gt;先ほどのようにくくりだした場合、その名前から処理が判断できそうか、というと、そんな名前がつけられるのであれば苦労はしないです。&lt;/p&gt; &lt;p&gt;仮につけたとしても、名前から判断できるものをつけられたためしがない。  &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;また、チェック１～３をまとめたりするのは、あるかと思います&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;div class="SourceBox"&gt; &lt;p&gt;Private Enum Pattern &lt;p&gt;　　　チェック１&lt;br&gt;　　　チェック２&lt;br&gt;　　　チェック３ &lt;p&gt;end Enum &lt;p&gt;Private Function チェック(byval pattern as Pattern) as Boolean  &lt;p&gt;　　整合性パターン１ () &lt;p&gt;　　整合性パターン２ () &lt;p&gt;&amp;nbsp;&amp;nbsp; select case pattern  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case Pattern.チェック１ &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 整合性パターン３のチェック()  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 整合性パターン４のチェック ()  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case Pattern.チェック2  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 整合性パターン１と２()  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 整合性パターン４のチェック()  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case Pattern.チェック3  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 整合性パターン５のチェック()  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End Case  &lt;p&gt;End Function &lt;/p&gt;&lt;/div&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;ただし、チェックという名前にしてしまうとなんのチェックなのかわからなくなってしまうケースがあることと、&lt;/p&gt; &lt;p&gt;一つのルーチンそのものが、長くなり一覧性が失われるってところです。&lt;/p&gt; &lt;p&gt;とはいえ、ここの判断はケースバイケースですし、好みもあるんじゃないかと。&lt;/p&gt; &lt;p&gt;私なら、チェック１という名前自体に直接結びつくメソッドがあるなら、統一しません。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;例えば、&lt;/p&gt; &lt;p&gt;更新処理（）というメソッドがあるなら、更新処理用チェック（）をつくってしまいます。&lt;/p&gt; &lt;p&gt;そこには更新処理用のチェック処理しかないので、その処理を追うときには、それ以外のことを考える必要がないからです。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;チェックという大きなルーチンをつかってしまったりすると、その部分を変更したときに、他のチェック２，３を行う&lt;/p&gt; &lt;p&gt;フローに影響がないかテストしなくてはならないから、ですね。&lt;/p&gt; &lt;p&gt;専用ルーチンなら、そんなことはありません。専用ルーチンだけをテストすればよいわけです。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;が、他のチェック内容とほぼ一緒で、数行しか違わないとかいうパターンなら、まとめてしまいます。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;なので、ケースバイケースです。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;蛇足ですが、チェックルーチン内で、「～の値をセット」とかいう別のことをしたらいけません。&lt;/p&gt; &lt;p&gt;#意味的に処理の分割ができなかったりすると、チェックルーチンと一緒に値のセットとか、プロパティ値のクリアとか&lt;br&gt;#ごちゃまぜにしてしまうのですが、それは処理を追いきれなくなります。&lt;/p&gt; &lt;p&gt;チェックルーチンは判断するだけにしておくことが必須だと思ってます。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;なんか、すんごいベーシックな話ですが...&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/mrt/aggbug/125674.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Mr.T</dc:creator><title>値と参照を知らない（Clearメソッドで、失敗する）</title><link>http://blogs.wankuma.com/mrt/archive/2008/02/20/124017.aspx</link><pubDate>Wed, 20 Feb 2008 13:14:00 GMT</pubDate><guid>http://blogs.wankuma.com/mrt/archive/2008/02/20/124017.aspx</guid><wfw:comment>http://blogs.wankuma.com/mrt/comments/124017.aspx</wfw:comment><comments>http://blogs.wankuma.com/mrt/archive/2008/02/20/124017.aspx#Feedback</comments><slash:comments>16</slash:comments><wfw:commentRss>http://blogs.wankuma.com/mrt/comments/commentRss/124017.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/mrt/services/trackbacks/124017.aspx</trackback:ping><description>&lt;p&gt;Mr.Tです、こんにちは。&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.wankuma.com/myugaru/archive/2008/02/19/123891.aspx"&gt;ここ&lt;/a&gt;とか、&lt;a href="http://blogs.wankuma.com/andochin/archive/2008/02/17/123547.aspx"&gt;ここ&lt;/a&gt;とか、みたときに、そういやなぁ...と思った。 &lt;p&gt;&lt;font color="blue"&gt;Private&lt;/font&gt; _srcParameter &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;New&lt;/font&gt; List(Of &lt;font color="blue"&gt;String&lt;/font&gt;)&lt;br&gt;&lt;font color="blue"&gt;Private&lt;/font&gt; _dstParameter &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;New&lt;/font&gt; List(Of &lt;font color="blue"&gt;String&lt;/font&gt;)&lt;br&gt;&lt;br&gt;&lt;font color="blue"&gt;Sub&lt;/font&gt; Main()&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Dim&lt;/font&gt; targetParameter &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;New&lt;/font&gt; List(Of &lt;font color="blue"&gt;String&lt;/font&gt;)&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; targetParameter.Add(&lt;font color="#c00040"&gt;"朝日のあたる家"&lt;/font&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; targetParameter.Add(&lt;font color="#c00040"&gt;"グインサーガ"&lt;/font&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; targetParameter.Add(&lt;font color="#c00040"&gt;"伊集院大介の冒険"&lt;/font&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _srcParameter = targetParameter&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TitlePrint(_srcParameter)&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; targetParameter.Clear()&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; targetParameter.Add(&lt;font color="#c00040"&gt;"おにぎり"&lt;/font&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; targetParameter.Add(&lt;font color="#c00040"&gt;"のりまき"&lt;/font&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; targetParameter.Add(&lt;font color="#c00040"&gt;"こーんすたーち"&lt;/font&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _dstParameter = targetParameter&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ItemPrint(_dstParameter)&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(&lt;font color="#c00040"&gt;"====================================="&lt;/font&gt;)&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;For&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Each&lt;/font&gt; sItem &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;String&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;In&lt;/font&gt; _srcParameter&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(&lt;font color="#c00040"&gt;"手元にある本:"&lt;/font&gt; &amp;amp; sItem)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Next&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;For&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Each&lt;/font&gt; sitem &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;String&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;In&lt;/font&gt; _dstParameter&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(&lt;font color="#c00040"&gt;"買い物リスト:"&lt;/font&gt; &amp;amp; sitem)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Next&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Sub&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;font color="blue"&gt;Private&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Sub&lt;/font&gt; TitlePrint(&lt;font color="blue"&gt;ByVal&lt;/font&gt; sList &lt;font color="blue"&gt;As&lt;/font&gt; List(Of &lt;font color="blue"&gt;String&lt;/font&gt;))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;For&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Each&lt;/font&gt; sItem &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;String&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;In&lt;/font&gt; sList&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(&lt;font color="#c00040"&gt;"手元にある本:"&lt;/font&gt; &amp;amp; sItem)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Next&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Sub&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;font color="blue"&gt;Private&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Sub&lt;/font&gt; ItemPrint(&lt;font color="blue"&gt;ByVal&lt;/font&gt; sList &lt;font color="blue"&gt;As&lt;/font&gt; List(Of &lt;font color="blue"&gt;String&lt;/font&gt;))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;For&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Each&lt;/font&gt; sitem &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;String&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;In&lt;/font&gt; sList&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(&lt;font color="#c00040"&gt;"買い物リスト:"&lt;/font&gt; &amp;amp; sitem)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Next&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Sub&lt;/font&gt; &lt;/p&gt; &lt;p&gt;あれぇ、どうしてだろうと思った時、それが値なのか、参照なのか、を意識していない。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/mrt/aggbug/124017.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Mr.T</dc:creator><title>TreeNodeのLevelとDepth</title><link>http://blogs.wankuma.com/mrt/archive/2008/02/08/122187.aspx</link><pubDate>Fri, 08 Feb 2008 11:51:00 GMT</pubDate><guid>http://blogs.wankuma.com/mrt/archive/2008/02/08/122187.aspx</guid><wfw:comment>http://blogs.wankuma.com/mrt/comments/122187.aspx</wfw:comment><comments>http://blogs.wankuma.com/mrt/archive/2008/02/08/122187.aspx#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blogs.wankuma.com/mrt/comments/commentRss/122187.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/mrt/services/trackbacks/122187.aspx</trackback:ping><description>&lt;p&gt;Mr.Tです、こんにちは。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;現在作成しているWebアプリケーションではTreeViewを頻繁に利用しているが、&lt;/p&gt; &lt;p&gt;そのときノードの深さを知りたいなと思い、たしかそんなプロパティがあったはず（でも、度忘れ）で、MSDNを調べてみた。&lt;/p&gt; &lt;p&gt;TreeViewのノードのプロパティ一覧から...あったよ&lt;strong&gt;Levelプロパティ&lt;/strong&gt;。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;うん、感覚的にLevelってのはわかりやすかったので、素直に以下のページへ。&lt;/p&gt; &lt;p&gt;&lt;a title="http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.treenode.level(vs.80).aspx" href="http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.treenode.level(vs.80).aspx"&gt;http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.treenode.level(vs.80).aspx&lt;/a&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;b&gt;Level&lt;/b&gt; プロパティの場合、ルート ノードは入れ子の最初のレベルと見なされ、0 が返されます。&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;よしよしと、Treeview.Levelと打とうとしたら、アレレ...インテリセンスがきかへん。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;あれ？と思って前のページを見直すと、System.Windows.Forms名前空間であるのに気がついた。&lt;/p&gt; &lt;p&gt;いや、そうじゃないんだ、System.Web.UI.WebControls 名前空間を調べないと。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;で、同じように、検索して&lt;strong&gt;Levelプロパティ&lt;/strong&gt;を探す。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;ない...&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;いや、おかしい、絶対あるはずと更に一覧を眺めると、&lt;strong&gt;Depth&lt;/strong&gt;プロパティ...ナニ...？&lt;/p&gt; &lt;p&gt;&lt;a title="http://msdn2.microsoft.com/ja-jp/library/system.web.ui.webcontrols.treenode.depth(VS.80).aspx" href="http://msdn2.microsoft.com/ja-jp/library/system.web.ui.webcontrols.treenode.depth(VS.80).aspx"&gt;http://msdn2.microsoft.com/ja-jp/library/system.web.ui.webcontrols.treenode.depth(VS.80).aspx&lt;/a&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;b&gt;Depth&lt;/b&gt; プロパティを使用して、ノードの深さを確認します。深さは、ノードとルート ノードの間の階層構造のレベル数を表します。たとえば、ルート ノードの深さは 0 です。ルート ノードの子ノードの深さは 1 です。以下同様です。&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;統一してないのね、&lt;/strong&gt;こういうの。&lt;/p&gt; &lt;p&gt;ええ、開発チームが違うんでしょ。わかってますよ。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;感覚的には、Levelがわかりやすいと思ったけど、Depthの方が日本語に近いのかな（深さとレベル）&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;でも、これって「ふいんき（変換できない）」 VS 「雰囲気」な的違いじゃね？と思ったりするのは、私だけでしょうか。&lt;/p&gt; &lt;p&gt;#いや違う。違うはずだ。違う...よね？&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/mrt/aggbug/122187.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Mr.T(mrt@wankuma.com)</dc:creator><title>壮絶な間違い</title><link>http://blogs.wankuma.com/mrt/archive/2007/12/18/113533.aspx</link><pubDate>Tue, 18 Dec 2007 15:12:00 GMT</pubDate><guid>http://blogs.wankuma.com/mrt/archive/2007/12/18/113533.aspx</guid><wfw:comment>http://blogs.wankuma.com/mrt/comments/113533.aspx</wfw:comment><comments>http://blogs.wankuma.com/mrt/archive/2007/12/18/113533.aspx#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://blogs.wankuma.com/mrt/comments/commentRss/113533.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/mrt/services/trackbacks/113533.aspx</trackback:ping><description>&lt;p&gt;Mr.Tです、こんにちは。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;マジックナンバー、マジックワードをプログラム上から消そうというときには、Const定義やリソースを利用する。&lt;br&gt;&lt;br&gt;Private Const MaxSelectionNo as Integer = 10&lt;/p&gt; &lt;p&gt;Me._errorMessage = Resources.MyResource.InvalidInputLength '入力長がおかしい&lt;/p&gt; &lt;p&gt;さて。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;1)文字列は、リソースに入れることができる。&lt;/p&gt; &lt;p&gt;　メッセージとか、タイトルとかCaptionも...&lt;/p&gt; &lt;p&gt;2)Const宣言の10をリソースに突っ込もうとして、IDEで怒られる。&lt;/p&gt; &lt;p&gt;&amp;nbsp; ああ、Constはビルド時に値がセットされるから、こういう使い方はできないよな。そうそう... &lt;p&gt;3)Const定義している定数や、判定値をリソースに突っ込み始める&lt;/p&gt; &lt;p&gt;　マジックナンバー、マジックナンバー...&lt;/p&gt; &lt;p&gt;4)（作業中）手をとめた。&lt;/p&gt; &lt;p&gt;　あれ、こうしてると、全く、Constっていらなくね？&lt;/p&gt; &lt;p&gt;5)Constについて、MSDNで調べ始める&lt;/p&gt; &lt;p&gt;　んなこた、わかってるんだよ、　MSDN！ もちっとガイドライン的な話はねーのかよ！&lt;/p&gt; &lt;p&gt;6)ResourceについてもMSDNで調べてみる。なんだか、おかしいと気がついてきた&lt;/p&gt; &lt;p&gt;　Constってリソース定義に置き換えられたっけ？ 多言語対応...必要ないし...&lt;/p&gt; &lt;p&gt;7)元に戻し始める&lt;/p&gt; &lt;p&gt;　おかしーとおもったんだよなー。そりゃ、メッセージはいいんだけど、マジックナンバーはやっぱConstだなー。&lt;/p&gt; &lt;p&gt;8)しばらく時間がたって、1)に戻る。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/mrt/aggbug/113533.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Mr.T(mrt@wankuma.com)</dc:creator><title>配列とCSVデータの有効利用：Memo</title><link>http://blogs.wankuma.com/mrt/archive/2007/11/22/109742.aspx</link><pubDate>Thu, 22 Nov 2007 11:09:00 GMT</pubDate><guid>http://blogs.wankuma.com/mrt/archive/2007/11/22/109742.aspx</guid><wfw:comment>http://blogs.wankuma.com/mrt/comments/109742.aspx</wfw:comment><comments>http://blogs.wankuma.com/mrt/archive/2007/11/22/109742.aspx#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://blogs.wankuma.com/mrt/comments/commentRss/109742.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/mrt/services/trackbacks/109742.aspx</trackback:ping><description>&lt;p&gt;Mr.Tです、こんにちは。&lt;/p&gt;
&lt;p&gt;&lt;del&gt;CSVファイルでは、どのフィールドが、どういう属性を持ったもなのか（文字なのか、数値なのか、Boolなのか）&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;&lt;del&gt;という構造はわからない。&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;&lt;del&gt;そのためプログラム上で、判断する必要が出てくるわけだが、&lt;/del&gt;その際のことをまとめてみた。&lt;/p&gt;
&lt;p&gt;CSVファイルではなく、CSVとしてのデータをすでにもらっている場合でのMemoです。&lt;/p&gt;
&lt;p&gt;#VB.NET .NETFramework2.0での話&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;１）読み込んだファイルの内容を、改行で区切る&lt;/p&gt;
&lt;p&gt;　&lt;strong&gt;Split&lt;/strong&gt;が有効ではあるが、これを使うと配列になってしまう。&lt;br&gt;　その先、更にカンマやタブなどで分解するときに&lt;strong&gt;Split&lt;/strong&gt;が必要になるため、配列でのループが2重で発生する。&lt;br&gt;　そのため文字列の切り出しで行ってもいいだろう。&lt;/p&gt;
&lt;p&gt;　改行については、改行文字に注意。CrLｆだったり、Crだったり、Lfだったりする可能性があるが、相手がなんなのか&lt;br&gt;　わからん場合は、明示的に、&lt;/p&gt;
&lt;p&gt;　Allrecords = Allrecords.Replace(ControlChars.CrLf, ControlChars.Lf)&lt;br&gt;　Allrecords = Allrecords.Replace(ControlChars.Cr, ControlChars.Lf) 
&lt;p&gt;　とでもしておくと、迷わずに済む。&lt;/p&gt;
&lt;p&gt;#このコストはあんまり気にしてない&lt;br&gt;#置換の順番には、注意。Crを先に置換すると、CrlfがLfLfになっちまう&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;２）レコードをいれておくなら、Classでもつくっとけ。&lt;/p&gt;
&lt;p&gt;　単純にPrivateなClassをつくってもそれまでなような気がする。（DataTableとかでもいいんだろうけど）&lt;/p&gt;
&lt;p&gt;　で、その際には、Enumで配列データの添え字に対する定義をつくっておこう。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Private&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Enum&lt;/font&gt; CSVField &lt;font color="blue"&gt;As&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Integer&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PlaceCode = &lt;font color="#c00040"&gt;0&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AllocationCode&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AddressCode&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AllocationBudge&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;Enum&lt;/font&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;こうすりゃ、クラスのフィールドやプロパティにセットするときも名前が同じにしとけば間違えにくいと思う。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim item as CSVitem = new CSVItem&lt;/p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; item.PlaceCode = targetAry(EnumBudgeCSVField.PlaceCode)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; item.AllocationCode = targetAry(EnumBudgeCSVField.AllocationCode)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; item.AddressCode = targetAry(EnumBudgeCSVField.AddressCode) 
&lt;p&gt;　CSVの変更があった場合やレイアウトの変更があった場合でも、修正部分は減る。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;３）配列の上限は、Enumからとっておけばイイんじゃね？&lt;/p&gt;
&lt;p&gt;　例えばデータチェックでは、配列の上限がいくらになるかで判定するだろう。&lt;/p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;If&lt;/font&gt; [&lt;font color="blue"&gt;Enum&lt;/font&gt;].GetValues(&lt;font color="blue"&gt;GetType&lt;/font&gt;(EnumBudgeCSVField)).GetUpperBound(&lt;font color="#c00040"&gt;0&lt;/font&gt;) &amp;lt;&amp;gt; targetAry.GetUpperBound(&lt;font color="#c00040"&gt;0&lt;/font&gt;) &lt;font color="blue"&gt;Then&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Me&lt;/font&gt;._errorMessage = &lt;font color="#c00040"&gt;"データが正しく設定されていません"&lt;/font&gt; &amp;amp; ControlChars.CrLf &amp;amp; _&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#c00040"&gt;"原始データ=&amp;gt;:"&lt;/font&gt; &amp;amp; recordData&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;Return&lt;/font&gt; false&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;If&lt;/font&gt;&lt;br&gt;
&lt;p&gt;　最大値つーことで、Enumの一番最後の要素で判断するのは危険。CSVに変更があったときに、忘れがちなとこだと思う。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;４）DBに入れるときは、そのままInsertにできるような部分構文吐き出す、ToStringみたいなメソッドがあると、楽な場合もある。&lt;/p&gt;
&lt;p&gt;　別にToStringでなくてもいいんだろうが、まあToSQLStringでもいいだろうし、GetSQLStringでもいい。&lt;/p&gt;
&lt;p&gt;　　Insert構文は、Insert into TableName(fields1,) values( **,**,'**',...)とこんな感じだから、value以下のデータが&lt;br&gt;　　さっくり取り出せるなら、簡単じゃないか。&lt;/p&gt;
&lt;p&gt;　&lt;/p&gt;
&lt;p&gt;５）CSVデータは、List構造や、Stackとか、Queueとかつかっとけ。&lt;/p&gt;
&lt;p&gt;　2)でつくったクラスを List (of T）とか、 Stack(of T)とか、Queue（of T）で利用すれば扱いが楽だろう。&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;６）データにカンマとかある？ そんなのは、格納クラスでつくりこんでしまえ。&lt;/p&gt;
&lt;p&gt;　データにカンマが存在する場合とか、""とかで文字列は囲ってあるとか、色々やりたいなら、やはり２）とかのクラスつくろうよ。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/mrt/aggbug/109742.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Mr.T(mrt@wankuma.com)</dc:creator><title>データベースを読み取り専用にする（SQLServer 2005）</title><link>http://blogs.wankuma.com/mrt/archive/2007/11/20/109468.aspx</link><pubDate>Tue, 20 Nov 2007 18:43:00 GMT</pubDate><guid>http://blogs.wankuma.com/mrt/archive/2007/11/20/109468.aspx</guid><wfw:comment>http://blogs.wankuma.com/mrt/comments/109468.aspx</wfw:comment><comments>http://blogs.wankuma.com/mrt/archive/2007/11/20/109468.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/mrt/comments/commentRss/109468.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/mrt/services/trackbacks/109468.aspx</trackback:ping><description>&lt;p&gt;&amp;nbsp; Mr.Tです、こんにちは。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;とりあえず、Googleで、網羅的に転がっている情報を見てみる。&lt;/p&gt; &lt;p&gt;検索語：SQLServer 読み取り専用&lt;/p&gt; &lt;p&gt;あきこさんのBlogが一番にHIT。&lt;a title="http://blogs.sqlpassj.org/akiko/archive/2006/08/23/18453.aspx" href="http://blogs.sqlpassj.org/akiko/archive/2006/08/23/18453.aspx"&gt;http://blogs.sqlpassj.org/akiko/archive/2006/08/23/18453.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;まずは、ここで読んでみると、Oracleとの比較うんちゃらと書いてある。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;で、まずは基本の部分がわからん場合は、そこからが出発点とする。&lt;/p&gt; &lt;p&gt;ファイルグループの指定が、必要だというが、ファイルグループとはなんぞということであれば、それを調べる。&lt;/p&gt; &lt;p&gt;そこで、きちんと原点に返る。Ｇｏｏｇｌｅで調べても同じソースにであえることもあるが、知識がない場合は&lt;/p&gt; &lt;p&gt;それが正しいものなのかどうかすら、判断できない。だから、「より正しいだろう原点」を覚えておくことがまず必要だ。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;SQLServer 2005 ヘルプをF1キーで起動。&lt;/p&gt; &lt;p&gt;検索語：Alter DataBase&lt;/p&gt; &lt;p&gt;&lt;a title="http://msdn2.microsoft.com/ja-JP/library/ms189563.aspx" href="http://msdn2.microsoft.com/ja-JP/library/ms189563.aspx"&gt;http://msdn2.microsoft.com/ja-JP/library/ms189563.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;ファイルグループってのは、&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;各データベースには、1 つのプライマリ ファイル グループがあります。プライマリ ファイル グループには、プライマリ データ ファイル、および他のファイル グループに配置されていないセカンダリ ファイルが含まれます。ユーザー定義のファイル グループを作成して、データベースの管理、データの割り当て、および配置をしやすくするために、データ ファイルをグループ化できます。&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;通常、GUIでつくるときは、プライマリだけになっているが、セカンダリという形で、複数のデータファイル(ｎｄｆファイル)を&lt;br&gt;作れる。&lt;/p&gt; &lt;p&gt;更に読むと、Blogにあるようにファイルグループに対して読み取り専用とすることができることがわかる。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;ここで、重要なのは、参照という項目にある、関連項目のチェックだ。&lt;/p&gt; &lt;p&gt;ここにある情報では、知識をすべて補完できるわけではなく、他の情報にまたがっている場合が多い。&lt;/p&gt; &lt;p&gt;なので、そこのリンク先から派生していろいろと見てみること。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;で、その中の、「ファイル グループのデザイン」&lt;/p&gt; &lt;p&gt;&lt;a title="http://msdn2.microsoft.com/ja-JP/library/ms189126.aspx" href="http://msdn2.microsoft.com/ja-JP/library/ms189126.aspx"&gt;http://msdn2.microsoft.com/ja-JP/library/ms189126.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;ここにくると、「&lt;a href="http://msdn2.microsoft.com/ms190257.aspx"&gt;読み取り専用のファイル グループと圧縮&lt;/a&gt;」というのがある。かなり、近い情報と思われるので、ここをクリック。&lt;/p&gt; &lt;p&gt; はいはい、セカンダリグループでないと読み取り専用にできないってことがわかった。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt; で、最初に戻って、Alter DataBaseで読み取り専用の指定場所をしらべると&lt;/p&gt; &lt;blockquote&gt; &lt;h6&gt;&amp;lt;filegroup_updatability_option&amp;gt;::=&lt;/h6&gt; &lt;p&gt;ファイル グループに読み取り専用、または読み取り/書き込みのプロパティを設定します。 &lt;dl&gt; &lt;dt&gt;READ_ONLY | READONLY  &lt;dd&gt; &lt;p&gt;ファイル グループが読み取り専用であることを指定します。この中のオブジェクトを更新することはできません。プライマリ ファイル グループを読み取り専用にすることはできません。この状態を変更するには、データベースに対する排他的アクセスが必要になります。詳細については、SINGLE_USER 句を参照してください。  &lt;p&gt;読み取り専用データベースのデータを変更することはできないため、次のようになります。 &lt;ul&gt; &lt;li&gt;システム起動時に自動復旧がスキップされます。 &lt;li&gt;データベースの縮小が不可能になります。 &lt;li&gt;読み取り専用データベースでは、ロックは発生しません。これにより、クエリのパフォーマンスが向上することがあります。&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;img src="http://msdn2.microsoft.com/ms174269.note(ja-jp,SQL.90).gif"&gt;メモ :  &lt;p&gt;キーワード READONLY は、将来のバージョンの Microsoft SQL Server では削除される予定です。新しい開発作業では READONLY の使用は避け、現在 READONLY を使用しているアプリケーションは修正するようにしてください。代わりに、READ_ONLY を使用してください。 &lt;/p&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;で、プライマリファイルグループでは読み取り専用にできない、とその前に書いてあったけど、排他的アクセスができれば、可能って&lt;/p&gt; &lt;p&gt;書いてある。というので、Single_User句を調べる。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;blockquote&gt; &lt;h6&gt;&amp;lt;db_user_access_option&amp;gt; ::=&lt;/h6&gt; &lt;p&gt;データベースへのユーザー アクセスを制御します。 &lt;dl&gt; &lt;dt&gt;SINGLE_USER  &lt;dd&gt; &lt;p&gt;一度に 1 人のユーザーだけがデータベースにアクセスできます。SINGLE_USER が指定されており、他のユーザーがデータベースに接続している場合には、指定したデータベースからすべてのユーザーが接続解除するまで、ALTER DATABASE ステートメントはブロックされます。この動作を無効にする場合は、WITH &amp;lt;termination&amp;gt; 句を参照してください。  &lt;p&gt;このオプションを設定したユーザーがログオフしても、データベースは SINGLE_USER モードのままです。そのユーザーがログオフした時点で、他のユーザーが 1 人だけデータベースに接続できます。 &lt;p&gt;データベースを SINGLE_USER に設定する前に、AUTO_UPDATE_STATISTICS_ASYNC オプションが OFF に設定されていることを確認します。ON に設定されている場合、統計の更新に使用されるバックグラウンド スレッドによってデータベースへの接続が使用されるため、シングル ユーザー モードでデータベースにアクセスできなくなります。このオプションの状態を表示するには、&lt;a href="http://msdn2.microsoft.com/ms178534.aspx"&gt;sys.databases&lt;/a&gt; カタログ ビューの &lt;b&gt;is_auto_update_stats_async_on&lt;/b&gt; 列にクエリを実行します。このオプションが ON に設定されている場合、次の作業を行います。 &lt;ol&gt; &lt;li&gt;AUTO_UPDATE_STATISTICS_ASYNC を OFF に設定します。 &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/ms173512.aspx"&gt;sys.dm_exec_background_job_queue&lt;/a&gt; 動的管理ビューにクエリを実行することにより、アクティブな非同期の統計ジョブがあるかどうかを確認します。 &lt;li&gt;アクティブなジョブがある場合、それらのジョブが完了するまで待機するか、&lt;a href="http://msdn2.microsoft.com/ms180016.aspx"&gt;KILL STATS JOB&lt;/a&gt; を使用して手動でジョブを終了します。&lt;/li&gt;&lt;/ol&gt;&lt;/dd&gt;&lt;/dl&gt; &lt;dl&gt; &lt;dt&gt;RESTRICTED_USER  &lt;dd&gt; &lt;p&gt;RESTRICTED_USER モードでは、&lt;b&gt;db_owner&lt;/b&gt; 固定データベース ロールと、&lt;b&gt;dbcreator&lt;/b&gt; 固定サーバー ロールおよび &lt;b&gt;sysadmin&lt;/b&gt; 固定サーバー ロールのメンバだけが、データベースに接続できます。ただし、接続ユーザー数に制限はありません。データベースに対するすべての接続は、ALTER DATABASE ステートメントの終了句で指定したタイムフレーム内に接続解除されます。データベースが RESTRICTED_USER 状態に移行すると、許可されていないユーザーによる接続の試行は拒否されます。&lt;/p&gt;&lt;/dd&gt;&lt;/dl&gt; &lt;dl&gt; &lt;dt&gt;MULTI_USER  &lt;dd&gt; &lt;p&gt;データベースに接続するための適切な権限を持つすべてのユーザーが許可されます。&lt;/p&gt;&lt;/dd&gt;&lt;/dl&gt; &lt;p&gt;このオプションの状態を確認するには、&lt;b&gt;sys.databases&lt;/b&gt; カタログ ビューの &lt;b&gt;user_access&lt;/b&gt; 列、または DATABASEPROPERTYEX 関数の &lt;b&gt;UserAccess&lt;/b&gt; プロパティを調べてください。 &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;さらに、SingleUserにするには、With句が必要らしいので、&lt;/p&gt; &lt;blockquote&gt; &lt;h6&gt;WITH &amp;lt;termination&amp;gt;::=&lt;/h6&gt; &lt;p&gt;ある状態から別の状態にデータベースが遷移する場合に、未完了のトランザクションがいつロールバックされるかを指定します。データベースにロックが存在した場合に終了句を省略すると、ALTER DATABASE ステートメントが無限に待機します。指定できる終了句は 1 つだけで、SET 句の後に指定します。  &lt;p&gt;&lt;img src="http://msdn2.microsoft.com/ms174269.note(ja-jp,SQL.90).gif"&gt;メモ :  &lt;p&gt;すべてのデータベース オプションで WITH &amp;lt;termination&amp;gt; 句が使用できるわけではありません。詳細については、「解説」の「オプションの設定」にある表を参照してください。  &lt;dl&gt; &lt;dt&gt;ROLLBACK AFTER integer [SECONDS] | ROLLBACK IMMEDIATE  &lt;dd&gt; &lt;p&gt;指定した秒数の後、または直ちにロールバックするかどうかを指定します。 &lt;/p&gt;&lt;/dd&gt;&lt;/dl&gt; &lt;dl&gt; &lt;dt&gt;NO_WAIT  &lt;dd&gt; &lt;p&gt;要求されたデータベースの状態またはオプションの変更がすぐに完了しない場合、トランザクションがコミットまたはロールバックするのを待機せずに、要求が失敗します。&lt;/p&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;/blockquote&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;ちょっとくじけそうになるが、プライマリファイルグループを読み取り専用にするなら、色々としなくてはならないらしい。&lt;/p&gt; &lt;p&gt;SingleUserモードにするには、&lt;/p&gt; &lt;p&gt;１）AUTO_UPDATE_STATISTICS_ASYNC オプションがOFFかどうか調べる&lt;/p&gt; &lt;p&gt;Use master&lt;/p&gt; &lt;p&gt;go&lt;/p&gt; &lt;p&gt;select &lt;b&gt;is_auto_update_stats_async_on&lt;/b&gt; from &lt;a href="http://msdn2.microsoft.com/ms178534.aspx"&gt;sys.databases&lt;/a&gt;&lt;/p&gt; &lt;p&gt;しかし、これで返ってくるのは、ON,OFFと思いきや0という数値。あわてず騒がす、&lt;a href="http://msdn2.microsoft.com/ms178534.aspx"&gt;sys.databases&lt;/a&gt;をHELPで検索。&lt;/p&gt; &lt;p&gt;&lt;a title="http://msdn2.microsoft.com/ja-jp/library/ms178534.aspx" href="http://msdn2.microsoft.com/ja-jp/library/ms178534.aspx"&gt;http://msdn2.microsoft.com/ja-jp/library/ms178534.aspx&lt;/a&gt;&lt;/p&gt; &lt;p&gt;ここで、&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;1 = AUTO_UPDATE_STATISTICS_ASYNC は ON です。 &lt;p&gt;0 = AUTO_UPDATE_STATISTICS_ASYNC は OFF です。&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;というくだりを発見できるので、OKとの判断がくだせる。&lt;/p&gt; &lt;p&gt;さらに、WITH句を指定しないといけないのだが、トランザクションが仮にあった場合に、どうするかということなので、&lt;/p&gt; &lt;p&gt;すぐにロールバックしてOKなら、IMMEDIATEを利用すればいいみたいだ。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;さらに、Single_Userモードにしたら、元の状態にもどさないといけないので、その元がなんなのかを調べる。&lt;/p&gt; &lt;p&gt;select &lt;b&gt;user_access&lt;/b&gt; from &lt;a href="http://msdn2.microsoft.com/ms178534.aspx"&gt;sys.databases&lt;/a&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;ユーザー アクセス設定です。  &lt;p&gt;0 = MULTI_USER が指定されています。 &lt;p&gt;1 = SINGLE_USER が指定されています。 &lt;p&gt;2 = RESTRICTED_USER が指定されています。&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;これで、MULTI_USERが指定されていることがわかったので、ようやく&lt;/p&gt; &lt;p&gt;alter database データベース名&lt;/p&gt; &lt;p&gt;set SINGLE_USER&lt;/p&gt; &lt;p&gt;with rollback IMMEDIATE&lt;/p&gt; &lt;p&gt;go&lt;/p&gt; &lt;p&gt;alter database データベース名&lt;/p&gt; &lt;p&gt;set READ_ONLY&lt;/p&gt; &lt;p&gt;with&amp;nbsp; IMMEDIATE&lt;/p&gt; &lt;p&gt;go&lt;/p&gt; &lt;p&gt;alter database データベース名 &lt;p&gt;set MULTI_USER &lt;p&gt;go &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;ということで、ようやくデータベースを読み取り専用にできたわけだ。&lt;/p&gt; &lt;p&gt;実は、alter databaseのドキュメントには、サンプルがのってあって、きちんと読み取り専用にするケースがかいてあった。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;#それにしても、このT-SQLコマンドのドキュメントにある文法記述って、なんだかわかりにくいなぁと思うのは私だけ？&lt;/p&gt; &lt;p&gt;#サンプルみないと、うまく理解できません。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/mrt/aggbug/109468.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Mr.T(mrt@wankuma.com)</dc:creator><title>アルゴリズム(3)</title><link>http://blogs.wankuma.com/mrt/archive/2007/11/14/108314.aspx</link><pubDate>Wed, 14 Nov 2007 15:35:00 GMT</pubDate><guid>http://blogs.wankuma.com/mrt/archive/2007/11/14/108314.aspx</guid><wfw:comment>http://blogs.wankuma.com/mrt/comments/108314.aspx</wfw:comment><comments>http://blogs.wankuma.com/mrt/archive/2007/11/14/108314.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.wankuma.com/mrt/comments/commentRss/108314.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/mrt/services/trackbacks/108314.aspx</trackback:ping><description>&lt;p&gt;Mr.Tです、こんにちは。  &lt;p&gt;前回の&lt;a href="http://blogs.wankuma.com/mrt/archive/2007/11/11/107605.aspx"&gt;続アルゴリズム&lt;/a&gt;の続きです。  &lt;p&gt;&amp;nbsp; &lt;p&gt;前回は、ここまででした。&lt;/p&gt; &lt;p&gt;&lt;font color="blue"&gt;While&lt;/font&gt; (登った距離 &amp;lt;= &lt;font color="#c00040"&gt;10&lt;/font&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp; 日にち = 日にち + &lt;font color="#c00040"&gt;1&lt;/font&gt;&amp;nbsp;&lt;br&gt;&lt;br&gt;（ループの中） &lt;br&gt;&lt;br&gt;&lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;While&lt;/font&gt;&amp;nbsp;&lt;br&gt;&lt;/p&gt; &lt;p&gt;これに、登った距離が+3mであることを追記していきます。&lt;/p&gt;&lt;font color="blue"&gt;While&lt;/font&gt; (登った距離 &amp;lt;= &lt;font color="#c00040"&gt;10&lt;/font&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp; 日にち = 日にち + &lt;font color="#c00040"&gt;1&lt;/font&gt;&amp;nbsp;&lt;br&gt;&lt;br&gt; 登った距離 = 登った距離 + &lt;font color="#c00040"&gt;3&lt;/font&gt;&lt;br&gt;&lt;br&gt; &lt;p&gt;（ループの中） &lt;/p&gt;&lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;While&lt;/font&gt;&amp;nbsp;&lt;br&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;更に、登った距離が10mを超えたかどうかを判断します。&lt;/p&gt; &lt;p&gt;ループの条件でも判断していますが、これはあくまでも、ループの処理を続けるためのもので&lt;br&gt;あることに注意してください。&lt;br&gt;&lt;strong&gt;ここがアルゴリズムと、実際のソースとの断絶のうちの一つです。&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;このループ処理は、あくまでも同じ処理を続けるためのものでしかなく、&lt;br&gt;それゆえ、&lt;/p&gt; &lt;p&gt;While (登った距離 &amp;lt;= 10)  &lt;p&gt;End While  &lt;p&gt;というループ条件でなくてもよいのです。  &lt;p&gt;例えば、  &lt;p&gt;Do  &lt;p&gt;Loop  &lt;p&gt;として、無限ループにしておいて、ループ内で条件一致のときに処理をループを抜けるとしてもなんら問題ありません。  &lt;p&gt;しかし、登った距離が10m以下であれば処理が続くという条件を無視する必要もないですので、あえてここではこの&lt;br&gt;条件を使っています。&lt;/p&gt; &lt;p&gt;&lt;br&gt;&lt;font color="blue"&gt;While&lt;/font&gt; (登った距離 &amp;lt;= &lt;font color="#c00040"&gt;10&lt;/font&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp; 日にち = 日にち + &lt;font color="#c00040"&gt;1&lt;/font&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp; 登った距離 = 登った距離 + &lt;font color="#c00040"&gt;3&lt;/font&gt;&lt;br&gt;&amp;nbsp; if 登った距離&amp;gt;&lt;font color="#c00040"&gt;10&lt;/font&gt; then&lt;br&gt;&amp;nbsp;&amp;nbsp; console.writeline(&lt;font color="#c00040"&gt;"答えは、{0}日です"&lt;/font&gt;,日にち.toString)&lt;br&gt;&amp;nbsp;&amp;nbsp; exit while&lt;br&gt;end if&lt;/p&gt; &lt;p&gt;（ループの中） &lt;br&gt;&lt;br&gt;&lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;While&lt;/font&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;最後に、こえてなければ、2mずり落ちます。&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;font color="blue"&gt;While&lt;/font&gt; (登った距離 &amp;lt;= &lt;font color="#c00040"&gt;10&lt;/font&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp; 日にち = 日にち + &lt;font color="#c00040"&gt;1&lt;/font&gt;&amp;nbsp;&lt;br&gt;&lt;br&gt;登った距離 = 登った距離 + &lt;font color="#c00040"&gt;3&lt;/font&gt;&lt;br&gt;&lt;br&gt;if 登った距離&amp;gt;&lt;font color="#c00040"&gt;10&lt;/font&gt; then&lt;br&gt;&amp;nbsp;&amp;nbsp; console.writeline(&lt;font color="#c00040"&gt;"答えは、{0}日です"&lt;/font&gt;,日にち.toString)&lt;br&gt;&amp;nbsp;&amp;nbsp; exit while&lt;br&gt;end if&lt;br&gt;&lt;br&gt;登った距離 = 登った距離 -&lt;font color="#c00040"&gt;2&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;While&lt;/font&gt;&amp;nbsp;&lt;br&gt;&lt;/p&gt; &lt;p&gt;で、大切な初期条件。&lt;/p&gt; &lt;p&gt;日にちは、いつから始まるのか？&lt;br&gt;登った距離は、どこからはじまるのか？&lt;/p&gt; &lt;p&gt;日にちは、初期条件から1日目から始まると、あります。&lt;br&gt;ところが、ソレに習って日にち=1と書いて&lt;/p&gt;日にち = &lt;font color="#c00040"&gt;1&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;While&lt;/font&gt; (登った距離 &amp;lt;= &lt;font color="#c00040"&gt;10&lt;/font&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp; 日にち = 日にち + &lt;font color="#c00040"&gt;1&lt;/font&gt;&amp;nbsp; (1)&lt;br&gt;&lt;br&gt;登った距離 = 登った距離 + &lt;font color="#c00040"&gt;3&lt;/font&gt;&lt;br&gt;&lt;br&gt;if 登った距離&amp;gt;&lt;font color="#c00040"&gt;10&lt;/font&gt; then&lt;br&gt;&amp;nbsp;&amp;nbsp; console.writeline(&lt;font color="#c00040"&gt;"答えは、{0}日です"&lt;/font&gt;,日にち.toString)&lt;br&gt;&amp;nbsp;&amp;nbsp; exit while&lt;br&gt;end if&lt;br&gt;登った距離 = 登った距離 -&lt;font color="#c00040"&gt;2&lt;/font&gt;&lt;br&gt; &lt;p&gt;(3)&lt;/p&gt;&lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;While&lt;/font&gt;&amp;nbsp;&lt;br&gt;&lt;br&gt; &lt;p&gt;こうやっちゃうと正しい答えが出てきません。&lt;br&gt;そもそも、(1)では最初、日にち=１とならなければいけないからです。&lt;/p&gt; &lt;p&gt;なぜ、こうなったのかといえば、日にちがカウントされるのは、一番最初の日だけ条件が違うからに他なりません。&lt;br&gt;日にちが+1になるのに、毛虫が登って落ちてからであるのに、最初の日だけは、登って落ちなくてもすでに1であるためです。&lt;/p&gt; &lt;p&gt;これは、日にち =1,2,3,...という処理を日にち=日にち+１としてしまったから、と言い換えても同じです。&lt;br&gt;日にち=1では、2,3,4,...となってしまいます。&lt;/p&gt; &lt;p&gt;そのため日にち=0と与えてやらなくてはなりません。&lt;/p&gt; &lt;p&gt;もし、仮に日にち=1と初期値をあたえるのであれば、(1)の式は、(3)に移しておかないといけません。&lt;br&gt;しかし、その場合、元々考えていた処理の流れではなくなってしまいます。&lt;/p&gt; &lt;p&gt;アルゴリズムを実装する場合は、条件が変わってしまうケースがあります。&lt;br&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;ここがアルゴリズムと、実際のソースとの断絶のもう一つです。&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;正しいソースは以下の通りです。 &lt;/p&gt; &lt;p&gt;日にち = &lt;font color="#c00040"&gt;0&lt;/font&gt;&lt;br&gt;登った距離 = &lt;font color="#c00040"&gt;0&lt;/font&gt;&lt;br&gt;&lt;font color="blue"&gt;While&lt;/font&gt; (登った距離 &amp;lt;= &lt;font color="#c00040"&gt;10&lt;/font&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp; 日にち = 日にち + &lt;font color="#c00040"&gt;1&lt;/font&gt;&amp;nbsp;&lt;br&gt;&lt;br&gt;登った距離 = 登った距離 + &lt;font color="#c00040"&gt;3&lt;/font&gt;&lt;br&gt;&lt;br&gt;if 登った距離&amp;gt;&lt;font color="#c00040"&gt;10&lt;/font&gt; then&lt;br&gt;&amp;nbsp;&amp;nbsp; console.writeline(&lt;font color="#c00040"&gt;"答えは、{0}日です"&lt;/font&gt;,日にち.toString)&lt;br&gt;&amp;nbsp;&amp;nbsp; exit while&lt;br&gt;end if&lt;br&gt;&lt;br&gt;登った距離 = 登った距離 -&lt;font color="#c00040"&gt;2&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;font color="blue"&gt;End&lt;/font&gt;&amp;nbsp;&lt;font color="blue"&gt;While&lt;/font&gt;&amp;nbsp;&lt;br&gt;&lt;/p&gt; &lt;p&gt;一応、プログラムの本当の初心者に対して、とか考えてみたエントリなんですが、やっぱりアルゴリズムを勉強させる方法ってのは&lt;br&gt;なかなかないですねぇ。&lt;/p&gt;&lt;img src ="http://blogs.wankuma.com/mrt/aggbug/108314.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>