特集:Small Basic開発入門

日本語化担当者が語るSmall Basic活用術

マイクロソフト 山田 昌良
2010/04/27

6. ここまでできるSmall Basic(2): Visual Basic移行

 「Visual Basicへの移行」機能の目的は、もちろんSmall Basicを使ってプログラムの入門編を終えた人が、簡単にVisual Basicへとステップアップできるためのものである。もちろんそれ以外にも、例えば最初はSmall Basicを使って気楽に作り始めたプログラムが、だんだん力が入ってより本格的なものに仕上げたくなり、Small Basicにはない機能がどうしても必要になった、というような場合に、非常に有益な機能といえるだろう。

 ここでは、Small Basicで作成したプログラムを、原稿執筆時点でダウンロード可能なVisual Studio 2010のRC版 へと移行してみよう。あらかじめ、Small Basicがインストールされているマシンと同じ環境に、Visual Studio 2010をインストールしておく(こちらから評価版がダウンロードできる)。

 まず、Small Basicでプログラムを作成して動作確認ができたら、Small Basicの画面の右上にある[等級をつける]ボタンを押す。

[等級をつける]ボタン

 すると、次の画面のダイアログで、変換されたファイルを保存する[出力先]の場所を聞かれるので、適当な場所を指定して[Continue]ボタンをクリックする。

変換されたファイルを保存する[出力先]の場所を指定するダイアログ

 すると、指定された場所に変換されたプログラムが出力され、同時にVisual Studioが起動して、その変換されたプログラムをロードしようとする。ただし、変換されたプログラムはVisual Studio 2008をターゲットにしているため、Visual Studio 2010ではさらに変換が必要になる。

 次の画面のようなVisual Studio 2010の変換ウィザードが自動的に起動するので、指示に従って変換する。保存場所を変えるのでなければ、特に何も設定を変更することはないので、そのまま[完了]まで進んで終わらせればよい。

Visual Studio 2010 のプロジェクト変換ウィザード

 すると、[ソリューション エクスプローラー]にSmall Basicから変換されたプログラムのプロジェクトが表示される。

[ソリューション エクスプローラー]に表示された変換後のプロジェクト

 次の画面のようにソース・ファイル(=.vbファイル)の内容を見ると、Visual BasicらしくDim文を使って変数宣言をするなどの変更が見られるが、根本的には元のSmall Basicのソース・コードとそれほど変わりがないことに気付くはずだ。

Visual Studio 2010 でのVisual Basicソース・ファイルの内容確認

 これは結局、SmallBasicLibrary.dllが提供するSmall Basicの機能をそのまま使っているためである。次の画面が示すようにプロジェクトには、SmallBasicLibraryアセンブリ(=SmallBasicLibrary.dllファイル)への参照が追加されている。

Small BasicLibraryアセンブリへの参照

 ソース・ファイル(=.vbファイル)を拡張してVisual Basicの持つあらゆる機能を追加することが可能なので、ここから本格的なプログラミングを始めることが可能だ。

目立たないが役立つSmall Basicの実用的な機能

 もう1つ、Small Basic本来の機能で、あまり目立たないが実用向けの機能を紹介したい。Small Basicはどうしてもタートル・グラフィックやアニメーションなどの処理をする機能が目立ってしまい、テキスト・データやファイル処理の機能が弱いかのような印象を受けがちであるが、もちろん実際にはそれらの機能もしっかりサポートされている。

 ファイル・アクセスのために使用するのはFileオブジェクトだ。このFileオブジェクトにはテキスト・ファイルから文字を読み込んだり、書き込んだり、またディレクトリ(フォルダ)を扱ったりするオペレーションが用意されている。

 また、文字列操作に使用するのはTextオブジェクトだ。Textオブジェクトには、文字列の長さを求めたり、文字列の中から一部の文字列を抽出したりといったオペレーションが用意されている。

オペレーション File.ReadLine( 文字列1, 数値1) ファイルから行単位で読み込む
文字列1:ファイルの完全パス
数値1:読み込むテキストの行番号 戻り値:読み込んだ行のテキスト
オペレーション File.WriteLine( 文字列1, 数値1, 文字列2 ) ファイルに対して行単位で書き込みを行う
文字列1:書き込み対象のファイルの完全パス
数値1:書き込む行位置
文字列2:書き込む文字列
オペレーション Text.GetLength( 文字列1 ) 文字列の長さを求める
文字列1:長さを求める対象の文字列
戻り値:その文字列の長さ
オペレーション Text.GetSubText( 文字列1, 数値1, 数値2) 文字列の中から一部のテキストだけを取り出す
文字列1:対象となる元の文字列
数値1:文字列1のどこから一部のテキストを取り出すのか開始点を表す数値
数値2:取り出すテキストの文字数
戻り値:取り出されたテキスト
サンプル・プログラムで使用するオブジェクトのオペレーションやプロパティ

 例えば、ファイル「C:\temp\test.txt」の先頭の1行を読み込んで変数aに格納するには以下のように書く。

a = File.ReadLine("C:\temp\test.txt", 1)
テキスト・ファイルの先頭の1行を読み込むサンプル・コード

 もう少し拡張して、ファイル「C:\temp\test.txt」のすべての行を読み込んで配列「a[]」に格納し、それをすべて画面に出力するプログラムは以下のようになる。

i=1
Loop:
  a[i] = File.ReadLine("C:\temp\test.txt",i)
  If( a[i]="" ) Then
    Goto output
  EndIf
  i = i+1
Goto Loop

output:
For j = 1 To i-1
  TextWindow.WriteLine(a[j])
EndFor
テキスト・ファイルの全行を読み込むサンプル・コード

 一方、ファイルへの書き込みには、File.WriteLine( 文字列1, 数値1, 文字列2 ) オペレーションを使用して以下のような形で出力するのが一般的だろう。ここではすでに配列「a[]」に10個の要素があって、その内容をファイル「C:\temp\test2.txt」に出力している。

For j = 1 To 10
  File.WriteLine("C:\temp\test2.txt", j, a[j])
  TextWindow.WriteLine(a[j])
EndFor
ファイルへテキストを書き込むサンプル・コード

 なお、あるファイルが存在するかどうかを判定する手軽な方法としては、そのファイルから1行読もうと試みて、読み込み内容が空でなければファイルが存在すると判定する方法が考えられる。

 それでは、上記のテクニックをすべてまとめてプログラムを作ってみよう。ここでは次の図で示すように、テキスト・ファイルを読み込み、その各行に行番号を付けて、元のファイルのファイル名に「_line」という名前を付加して出力するプログラムを作ってみた。

テキスト・ファイルの各行に行番号を付けるプログラムのイメージ
Sample.txtファイルの各行に行番号を付けてSample_line.txtファイルとして保存する。

 記述したプログラムは次のとおり。

TextWindow.Write("テキスト・ファイル名(.txt)とパスを入力: ")
name = TextWindow.Read()
buf = File.ReadLine(name, 1)

' ファイルが本当に存在するか検証
if( Text.GetLength(buf) = 0 ) Then
  TextWindow.WriteLine(name + " は存在しないか空です。")
  Program.End()
EndIf

' ファイルからテキスト・データを読み込む
a[1] = buf
i=2
Loop:
  a[i] = File.ReadLine(name, i)
  If( a[i]="" ) Then
    Goto output
  EndIf
  i=i+1
Goto Loop

output:
' 出力用ファイル名を作る
cnt = Text.GetLength(name)
newname = Text.GetSubText(name,1,cnt-4) + "_line" + ".txt"

'  行番号を付けながら出力する
For j=1 To i-1
  a[j] = j + ": " + a[j]
  File.WriteLine(newname, j, a[j])
  TextWindow.WriteLine(a[j])
EndFor
TextWindow.WriteLine("出力しました")
テキスト・ファイルの各行に行番号を付けるサンプル・コード

 以上、駆け足ではあったが、Small Basicを入門用としてだけではなく、実用的に、または楽しむために使っていただくことを考慮して、Small Basicの機能を紹介した。これらの機能を使って、ちょっとしたプログラムならばこれまで以上に簡単に手早く作成したり、プログラミングの楽しさを再確認したりしていただけたら幸いである。

 また、ここに紹介し切れなかったSmall BasicのTipsや、Visual Studio 2010の便利な機能などについて、今後、こちらのブログでも紹介していくつもりなので、興味のある方は併せて参照していただきたい。End of Article

 

 INDEX
  [特集]Small Basic開発入門
  日本語化担当者が語るSmall Basic活用術
    1.Small Basicの位置付け/用途/準備・導入
    2.面白いSmall Basic開発事例(1)
    3.面白いSmall Basic開発事例(2)
    4.ここまでできるSmall Basic(1):SilverlightやEXE出力
  5.ここまでできるSmall Basic(2):Visual Basic移行


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

注目のテーマ

業務アプリInsider 記事ランキング

本日 月間
ソリューションFLASH