|
|
連載
プロフェッショナルVB.NETプログラミング
―― VB 6プログラマーのためのVB.NET入門 ――
第4回 変数スコープと文字列関数
(株)ピーデー
川俣 晶
2002/04/23
|
今回は、前回にも少し触れたVBFixedString属性の活用方法をまず解説し、続いてVB 6とVB.NETでの変数のスコープの違いや、文字列を扱う関数の挙動の違いについて解説する。
ランダム・ファイルとVBFixedString属性
VBFixedString属性は文字列変数の長さを制限しないことは前回ですでに述べた通りである。では、いったいどこで、この長さは意味を持つのか。その実例を示すサンプルをお見せしよう。
さて、ここでお見せするサンプル・ソースはランダム・ファイルの入出力を行うサンプルである。ファイル入出力関係に関しては、VB 6からVB.NETでは、まったくの別物といってよいほどの変貌を遂げている。VB.NET固有のステートメントとしていくつかの関数などがあるほか、.NET Frameworkクラス・ライブラリの入出力関連クラスもすべて使うことができる。どちらを使ってもよいのだが、伝統的なBASIC言語のランダム・ファイルを扱うには、VB.NET固有の関数を用いると便利である。
以下は、VB 6で記述したランダム・ファイルを扱うサンプル・ソースである。
1: Private Type Person
2: Age As Integer
3: Name As String * 32
4: End Type
5:
6: Private Sub Form_Load()
7: Dim p As Person
8: Open "c:\test.dat" For Random As #1 Len = Len(p)
9: p.Age = 17
10: p.Name = "太郎"
11: Put #1, 1, p
12: p.Age = 18
13: p.Name = "花子"
14: Put #1, 2, p
15:
16: Get #1, 1, p
17: Debug.Print p.Age
18: Debug.Print p.Name
19: Get #1, 2, p
20: Debug.Print p.Age
21: Debug.Print p.Name
22: Close #1
23: End Sub |
|
固定長のデータをファイルに書き込み、それを読み込むVB 6のサンプル・プログラム1 |
これを実行すると以下のようになる。
-17-
太郎------------------------------
-18-
花子------------------------------ |
|
サンプル・プログラム1の実行結果 |
編集部注:黄色のハイフン(-)は半角スペースを示しています。
|
Typeステートメントで定義した固定長のデータをPutステートメントで書き込み、Getステートメントで読み出している。これをVB.NET用に書き換えたのが以下のサンプル・ソースである。
1: Public Class Form1
2: Inherits System.Windows.Forms.Form
3:
4: #Region " Windows フォーム デザイナで生成されたコード "
5:
6: Private Structure Person
7: Public Age As Integer
8: <VBFixedStringAttribute(32)> Public Name As String
9: End Structure
10:
11: Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
12: Dim p As Person
13: FileOpen(1, "c:\test.dat", OpenMode.Random, , , Len(p))
14: p.Age = 17
15: p.Name = "太郎"
16: FilePut(1, p, 1)
17: p.Age = 18
18: p.Name = "花子"
19: FilePut(1, p, 2)
20:
21: FileGet(1, p, 1)
22: Trace.WriteLine(p.Age)
23: Trace.WriteLine(p.Name)
24: FileGet(1, p, 2)
25: Trace.WriteLine(p.Age)
26: Trace.WriteLine(p.Name)
27: FileClose(1)
28: End Sub
29: End Class |
|
サンプル・プログラム10をVB.NETで書き換えたサンプル・プログラム2 |
これを実行すると以下のようになる。
17
太郎----------------------------
18
花子---------------------------- |
|
サンプル・プログラム2の実行結果 |
編集部注:黄色のハイフン(-)は半角スペースを示しています。
|
Openステートメントの代わりにFileOpen関数、Putステートメントの代わりにFilePut関数、Getステートメントの代わりにFileGet関数、Closeステートメントの代わりにFileClose関数がそれぞれ使われている。書式が少し違うが、渡している引数の内容はほぼ同じである。FileOpen関数に渡しているいくつかの名前が異なっているが、基本的には同じ意味を持つキーワードが存在している。
さて、肝心の8行目に記述されたVBFixedString属性の効能だが、13行目のLen関数、16、19行目のFilePut関数、21、24行目のFileGet関数の動作に影響を及ぼしている。Len関数は、文字列の長さに関係なく、VBFixedString属性の値を用いて構造体の長さを計算しており、ランダム入出力するための正しい構造体のバイト数を計算できる。またFilePut関数では、VBFixedString属性で指定された長さに足りない文字列には空白文字を補って、正しい長さでファイルに書き込みを行う。FileGet関数では、VBFixedString属性で指定された長さで文字列を取得している。
INDEX |
|
連載 プロフェッショナルVB.NETプログラミング |
|
第4回 変数スコープと文字列関数 |
|
1.ランダム・ファイルとVBFixedString属性 |
|
2.変数のスコープ |
|
Insider.NET 記事ランキング
本日
月間