パソコン活用研究BASIC&VB&EXCEL達人の道

VB.Net Framework SDKで遊んでみる(コンソールアプリケーション)

---------------------------------------------------------------------------------
少しVB.Netでコンソールアプリ(まあ、たわいもないものですが)を作ってみました。
VB.netは文字列はstringクラスというクラスになっています。このあたりがVB6とは似て非なる部分です。
コンソール入出力を使った簡単なプログラムを作りながら、VB6などとの違いにも少し触れておきます。
---------------------------------------------------------------------------------

1.コンソール入出力

最初に、コンソール入出力の方法について簡単にまとめておきます。
コンソールとは、Windowsではコマンドプロンプトの画面ですね。つまりキーボードからの入力(標準入力)、
画面への出力(標準出力)です。

入力
Console.readLine コンソールからの1行入力

出力
Console.Write コンソールへの出力(改行しない)
Console.WtileLine() コンソールへの出力(改行あり)

2. 文字数を数えるプログラム

まず、入力した文字列の文字数を数えるプログラム

imports System
Public Module modmain
Sub Main()
dim i as integer
dim str as string
str = Console.ReadLine
'VB6以前の関数
i=Microsoft.VisualBasic.Len(str)
Console.Writeline(i)

i=str.length
Console.Writeline(i)
End Sub
End Module


今回は入力した文字列の文字数を数えるプログラムです。注目点は2つです。まず一点め。
コンソールから1行入力の場合は、Console.ReadLine を使います。

もうひとつの注目点は、VB.NetにはVB6時代と互換性を保つために、Microsoft.VisualBaiscというクラス
が用意されており、このクラスにVB6の関数が用意されている点です。
VB6時代の関数を使いたい場合は、Microsoft.VisualBasicという名前空間に続けてVB6の関数を記述します。
例えば、文字列の文字数を数える時はMicrosoft.VisualBasic.Len() になります。

さて、同じことをVB.Netの本来のやり方で実施するとなると、上記のプログラムでは
i=str.length
という記述になります。

VB6までの文字列は、文字列型という変数の基本型のひとつでしたが、
VB.Netでは文字列はstringクラスというクラスになっています。従って、プロパティやメソッドを持ちます。
length というのは文字列の長さをあらわすプロパティです。
ここは、VB6までとVB.Net以降の大きな違いのひとつです。

まあ、とりあえずはあまりそんなことは意識せず、文字列変数.length で文字列の長さがわかるんだろ
と覚えてしまえばいいと思いますが。




3.ひし形を表示するプログラム

(1) PadLest, PadRightを使う
Stringクラスのメソッドを使ったプログラムをもうひとつ作ってみました。
ひし形を表示するプログラムです。

<hishikata.vb>

imports System
Public Module modmain
Sub Main()
dim i as integer
dim a, str as string
a=""
for i=0 to 5
str=a.PadLeft(6-i)
str=str+a.PadRight(i*2+1,"*")
Console.Writeline(str) ' Display message on computer screen.
next
for i=4 to 0 step -1
str=a.PadLeft(6-i)
str=str+a.PadRight(i*2+1,"*")
Console.Writeline(str)
next
End Sub
End Module

Padleft()は文字列の左側に指定した文字で連続して埋めるメソッドです。指定文字を省略すると空白が詰められます。
PadRight()は文字列の右側に指定した文字を連続して埋めるメソッドです。
ゼロパディング(ゼロ埋め)などでよく使われtる、文字列(Stringクラス)のメソッドです。





(2) 別の方法 Space$, Stringクラスコンストラクタを使う
空白を作るところはPadLeftメソッドではなく、Visual Basic時代(VB4〜VB6)時代のsapce$関数を
Microsoft.VisualBasic.Space$(6-i) として使ってみました。
"*"の連続はStringクラスのコンストラクタを使って生成しています。

<hishikata2.vb>

imports System
Public Module modmain
Sub Main()
dim i as integer
dim str, str2 as string
for i=0 to 5
str=Microsoft.VisualBasic.Space$(6-i)
str2= new String("*",i*2+1)
str=str+str2
Console.Writeline(str) ' Display message on computer screen.
next
for i=4 to 0 step -1
str=Microsoft.VisualBasic.Space$(6-i)
str2= new String("*", i*2+1)
str=str+str2
Console.Writeline(str)
next
End Sub
End Modul



4. VB6との違い

Visual Basic(VB4〜VB6)との違い
以下にVB4〜VB6でFormにひし形を表示するプログラムを示します。

Private Sub Form_Paint()
Dim i As Integer
Dim str As String
Cls
For i = 0 To 5
str = Space$(6 - i)
str = str + String$(i * 2 + 1, "*")
Print str
Next
For i = 4 To 0 Step -1
str = Space$(6 - i)
str = str + String$(i * 2 + 1, "*")
Print str
Next
End Sub

VB.netはVB4〜VB6の子孫なので上記のVB.net用のhishikata2.vbと似てはいます。
しかし、似て非なる個所もあります。
連続した文字列を生成するのにどちらもstring/string$を使っていますが、
VB.netのnew String("*",i*2+1) はstringクラスのコンストラクタを使っているのに対し
VB用の String$(i * 2 + 1, "*") は連続した文字列を生成する関数です。




Top page | Visual Basic&Excel活用研究目次