そのほか |
|
|
VB.NETで楽天RSSからリアルタイム情報を取得する<その5>(2)
カテゴリ:「VB.NETで自動売買」入門
前回は、画面に銘柄名称と現在値を表示するコードを追加しました。
でも、銘柄名称は良いとして現在値(現在の株価)については金額であるにも関わらず 小数点以下2桁まで表示され、しかも数字の手前に空白が表示されていました。 これじゃあ見映えが悪いです。 という訳で今回は、株価を取得した時に実際どうすれば良いかを解説します。 現在のコードはこうなっています。 Dim praceByte As Byte() = client.Request("現在値", 1, 60000) 現在値.Text = Encoding.Default.GetString(praceByte) 「Encoding.Default.GetString(praceByte)」の戻り値であった小数点と空白付きの 文字列を、何とか綺麗な数字として扱いたいです。 ではまず、画面に表示する見映えの部分に手を入れます。 最初に文字列を変数に入れましょう。この時、前後の余分な空白を取り除くメソッドを 追加します! Dim priceText As String = Encoding.Default.GetString(praceByte).Trim Trim()は、文字列の前後の空白を取り除いてくれるメソッドで、戻り値はStringです。 「Encoding.Default.GetString(praceByte)」の戻り値がStringなので、その戻り値の Stringに対してまたTrim()メソッドを呼んで、その戻り値をpriceTextというStringに セットしています。 ちなみに「Trim」の後ろにカッコがありませんが、VBは引数が無いメソッドはカッコを 省略出来ます(書いても良いですよ)。 次に、priceText(空白を除去した小数点付きの数字を表すString)から小数点以下を 取り除いて整数値にします。 整数値にする方法ですが、私はこんな方法を使っています。 ※もっとスマートにやってる方は教えて下さい(汗) Dim dotIndex As Integer = priceText.IndexOf(".") If dotIndex > -1 Then priceText = priceText.Substring(0, dotIndex) End If 1行目のIndexOf()で小数点の位置(priceTextの何桁目にあるか)を調べます。 1桁目なら0、2桁目なら1、・・・という風に返ります。小数点が無ければ-1になります。 「If」の後は「小数点以下が存在したら」という意味になります。 なぜ「小数点以下が存在したら」という条件が必要かは後述します。 Substring()は、対象のStringの、何桁目から何桁を切り出すメソッドです。 上の例だと、0(1桁目)から小数点位置の桁数を切り出して再びpriceTextにセットします。 つまり、小数点以下をちょん切っています。 ・・・ここで1つポイントがあります。 もしDDEクライアントのRequest()メソッドを呼び出した時が8:30とかだったら どうでしょう?現在の株価ってありますか?ありません。 そういう時には、実は戻り値は空白になっています。 その時のために「小数点が見つかった時だけ」という記述が必要なんです。 ちなみに「If~Then~End If」の説明は割愛させて頂きます。 あと「表示をカンマ区切りにしたい」等の要望もあると思いますが、その場合は 上のpriceTextを一度整数値(Integer型)に変換し、それをまた文字列に変換する時に 書式を設定してやれば可能です。 整数値に変換する時も、株価が無い時(ザラバ前)を考慮する事を忘れないように して下さい(やり方はあえて書きません。必要であれば各自組み込んで下さい)。 また、プログラム中で数値の大小比較を行ったり計算を行うために株価などの数値を 整数で扱いたい時もどうようです。文字列のままでは無理なので整数値に変換して あげましょう。 最後に、現在値のテキストボックスを右揃えにしないと、数値なのに左詰めは 格好悪いので、そこだけ変更します! 現在値のテキストボックスを選択した状態で、プロパティウィンドウの 「TextAlign」を「Right」に変更しましょう。 実行させると、株価の見映えが前回より良くなっているのが分かりますよね♪ 今回は短いですがここまで。 そして今回で「リクエスト方式」によるリアルタイム情報の取得について解説を終了します。 分からない事、また「もう少しこうしたんだけど」など質問があればコメントを下さい。 分かる範囲でお応えします。 質問が無かったり、その内容が収束したと思ったら、少し日にちを置いてから 「アドバイス方式(値に変更があった時に通知してくれる方式)」編を始めようと思います。 宜しくお願いします。 現在のソースコードはこうなりました。 ちなみに「アドバイス方式編」も、画面は同じものを使用しようと考えています(^-^;
[「VB.NETで自動売買」入門] カテゴリの最新記事
現在値などを整数値にする方法ですが、ラフに処理するならVal関数を使用して
priceText = Val(priceText).ToString が簡単です。trimも不要です。8:30のときはゼロになります。 (Apr 16, 2008 01:43:28 AM)
micorosoftさん
>現在値などを整数値にする方法ですが、ラフに処理するならVal関数を使用して > >priceText = Val(priceText).ToString > >が簡単です。trimも不要です。8:30のときはゼロになります。 ----- 寄り付いたかどうかの判断が不要の場合は使えますね。 (Apr 16, 2008 08:05:18 AM) |