10-2 MyBasic
帳票定義ファイルの頁印刷セクションおよび明細印刷セクションを記述するためのスクリプトにはMyBasicを用います。MyBasicは一般のBasicに準じた簡単なプログラム言語です。Basicの経験のある方でしたらすぐにでも書けると思います。
10-2-1 制御文
プログラムの実行(流れ)の制御を行う文を制御文といいます。
制御文には次の3つの構文が使用できます。
1. 繰り返し制御
Do While 条件式
[statements]
[Exit Do]
[statements]
Loop
条件式の値が0になるまで、Do と Loop の間のステートメントを繰り返します。
Exit Do で強制的にループを抜けます。
2. 分岐制御1
If 条件式 Then
[statements]
End If
条件式の値が0でないなら、If と End If の間のステートメントを実行します。
3. 分岐制御2
If 条件式 Then
[statements]
Else
[statements]
Endif
条件式の値が0でないなら、If と Else の間のステートメントを実行し、それ以外なら Else と End If の間のステートメントを実行します。
10-2-2 変数
文字や数値を格納するための場所を表します。変数名は次の規則に従って付けてください。
変数名の先頭の文字は、英字、漢字、ひらがな、カタカナのいずれかでなければなりません。
変数名のその他の部分には英数字、漢字、ひらがな、カタカナ、アンダスコア (_) を使うことができます。
変数には文字列を格納する文字列型変数と数値を格納する数値変数型があります。変数の型は変数に値を格納するときに自動的に決まります。
変数には次の2つの種類があります。。
1. システム変数
予め定義されている変数です。例えば Day というシステム変数には今日の日が入っています。
詳しくは「10-3 システム変数」の項をご覧ください。
2. 利用者定義変数
手続き記述の中で任意に用いることができる変数です。変数の宣言は不要です。
利用者定義変数は代入ステートメントの左辺として用いられたときに自動的に定義されます。
10-2-3 定数
手続き記述のなかで直接に固定値を使用することができます。これを定数といいます。
定数には数値を現す数値定数と文字列を現す文字列定数があります。
定数には次の2つの種類があります。
1. システム定数
予め定義されている定数です。次の3つです。
TRUE | 数値 | 論理式の真を現します。 |
FALSE | 数値 | 論理式の偽を現します。 |
Null | 文字列 | 空の文字列を現します。 |
2. 利用者定義定数
手続き記述の中で任意に用いることができる定数です。
数値定数は 12345 のようにカンマを付けずに記述します。整数のみ扱えます。
文字列定数は "本日は晴天なり" のようにダブルクォーテションで囲みます。
10-2-4 演算子
演算子は2つの項目間で演算を行うもので、次のものがあります。
1. 数値演算子
2つの数値(定数、変数、関数)の加減乗除を行います。
+ | 加算 |
= | 減算 |
* | 乗算 |
/ | 除算 |
2. 文字列演算子
2つの文字列(定数、変数、関数)の連結のみが行えます。
+ | 2つの文字列を連結します。 |
3. 比較演算子
2つの数値(定数、変数、関数)または2つの文字列(定数、変数、関数)どうしの比較を行い正しければ真に、間違っていれば偽になります。なお真はTrueと偽はFalseと定義されています。文字列の比較は1バイトずつアスキーコードで比較します。
+ | より小さい? |
<= | 以下? |
>? | より大きい? |
>= | 以上 |
= | 等しい |
<> | 等しくない? |
4. 論理演算子
2つの式の間の論理的関係を計算します。
And | 論理積 両辺の値がともに 真(True)の場合のみ真(True)になります。 |
Or | 論理和 両辺の値のどちらかが 真(True)であれば真(True)になります。 |
10-2-5 式
変数、定数、関数、演算子、括弧()の組み合わせたもので、式全体で1つの数値または文字を現します。
1. 数値式
数値を現すものを数値式といいます。
例 (Year*10000+Mon+100+Day)/2
2. 文字列式
文字列を現すものを文字列式といいます。
例 GetFolderName(DocumentFile)+"Mydb.Txt"
10-2-6 ステートメント
ステートメントとは手続きを実行するための命令の単位です。
1つのステートメントは1行に記述します。複数行に分けることはできません。
また1つの行に複数のステートメントを書くこともできません。
1. 代入ステートメント
式の値を利用者定義変数に格納します。一般形式は次の通りです。
利用者定義変数 = 式
2. フォント指定ステートメント
以下の印刷で使用するフォントを指定します。
構文
SetFont FontNumber, [TextColor], [Pitch]
FontNumber | フォントセクションで定義したフォントの番号(1~8)を指定します。 |
TextColor | 文字色を数値(0~65535)で指定します。RGB関数を利用すると便利です。指定しなければ文字色は現在のままです。 |
Pitch | 文字間隔を座標単位でしていします。 指定しなければ標準の間隔です。 |
3. 文字列出力ステートメント
文字を出力します。
構文
Print X, Y, outputlist, [Alignment], [EvenLength]
X, Y | 印刷開始位置を座標単位で指定します。 |
outputlist | 任意の文字列や数値(定数、変数、関数、式)を指定します。 複数指定する場合はセミコロンで区切って下さい。 |
Alignment | 配置方法を指定します。 0 左寄せ(規定値) 1 右寄せ 2 中央 3 均等配置 |
EvenLength | 均等配置する場合は均等配置長さを座標単位で指定します。 |
4. 複数行文字列出力ステートメント
文字を出力します。
構文
PrintM X, Y, Width, Height, outputlist
X, Y | 印刷開始位置を座標単位で指定します。 |
Width | 描画幅を座標単位で指定します。0の場合は高さより自動計算します。 |
Height | 描画高さを座標単位で指定します。0の場合は幅より自動計算します。 |
outputlist | 任意の文字列や数値(定数、変数、関数、式)を指定します。 複数指定する場合はセミコロンで区切って下さい。 |
5. 線描画ステートメント
2点を結ぶ直線を指定のペンで描画します。
構文
DrawLine X1, Y1, X2, Y2, PenNumber
X1, Y1 | 始点を座標単位で指定します。 |
X2, Y2 | 終点を座標単位で指定します。 |
PenNumber | ペンセクションで定義したペンの番号(1~8)を指定します。 |
6. 四角形描画ステートメント
2点を対角とする四角形を指定のペンで描画します。
ブラシを指定すると中をブラシで塗りつぶします。
構文
DrawRect X1, Y1, X2, Y2, PenNumber, [BrushNumber];
X1, Y1 | 左上隅の点を座標単位で指定します。 |
X2, Y2 | 右下隅の点を座標単位で指定します。 |
PenNumber | ペンセクションで定義したペンの番号(1~8)を指定します。 0の場合は輪郭を描画しません。 |
BrushNumber | ブラシセクションで定義したブラシの番号(1~8)を指定します。 省略すると塗りつぶしません。 |
7. 角の丸い四角形描画ステートメント
2点を対角とする角の丸い四角形を指定のペンで描画します。
ブラシを指定すると中をブラシで塗りつぶします。
構文
DrawRoundRect X1, Y1, X2, Y2, R, PenNumber, [BrushNumber];
X1, Y1 | 左上隅の点を座標単位で指定します。 |
X2, Y2 | 右下隅の点を座標単位で指定します。 |
R | 角の丸みの半径を座標単位で指定します。 |
PenNumber | ペンセクションで定義したペンの番号(1~8)を指定します。 0の場合は輪郭を描画しません。 |
BrushNumber | ブラシセクションで定義したブラシの番号(1~8)を指定します。 省略すると塗りつぶしません。 |
8. 楕円描画ステートメント
2点を対角とする四角形に内接する楕円を指定のペンで描画します。
ブラシを指定すると中をブラシで塗りつぶします。
構文
DrawEllipse X1, Y1, X2, Y2, PenNumber, [BrushNumber];
X1, Y1 | 左上隅の点を座標単位で指定します。 |
X2, Y2 | 右下隅の点を座標単位で指定します。 |
PenNumber | ペンセクションで定義したペンの番号(1~8)を指定します。 0の場合は輪郭を描画しません。 |
BrushNumber | ブラシセクションで定義したブラシの番号(1~8)を指定します。 省略すると塗りつぶしません。 |
9. ピクチャ描画ステートメント
指定位置に絵を描画します。
構文
DrawPicture X, Y, Width, Height, PictureNumber
X, Y | 左上隅の点を座標単位で指定します。 |
Width | 描画幅を座標単位で指定します。0の場合は高さより自動計算します。 |
Height | 描画高さを座標単位で指定します。0の場合は幅より自動計算します。 |
PictureNumber | ピクチャセクションで定義したピクチャの番号(1~8)を指定します。 |
10. 外部プログラム実行ステートメント
実行プログラムまたはドキュメントを開きます。
構文
Execute finename, [Parameters]
finename | 実行ファイル名またはドキュメントファイル名を指定します。 ドキュメントファイルの場合はファイルタイプによりシェルに登録された実行ファイルが自動的に起動されます。 |
Parameters | finename が実行ファイル名の場合はパラメータを指定することができます。パラメータは文字列です。 |
11. 郵便番号バーコード印刷ステートメント
住所文字列を元に郵便番号バーコードを描画するステートメントです。
別売の郵便番号パックが必要です。
構文
DrawZipBarcode X, Y, Width, Height, Address
X, Y | 左上隅の点を座標単位で指定します。 |
Width | 描画幅を座標単位で指定します。 |
Height | 描画高さを座標単位で指定します。 |
Address | 郵便番号バーコードを描画する住所を指定します。 |
12. バーコード印刷ステートメント
文字列より指定タイプのバーコードを印刷します。
別売のバーコードパックが必要です。
構文
DrawBarcode X, Y, Width, Height, Type, Data
X, Y | 左上隅の点を座標単位で指定します。 |
Width | 描画幅を座標単位で指定します。 |
Height | 描画高さを座標単位で指定します。 |
Type | バーコードデータのタイプを指定します。 |
Data | バーコードデータ文字列です。 |
10-2-7 関数
関数とシステムで予め用意されている手続きで値を返すものです。関数には数値を返す数値関数と、文字列を返す文字列関数があります。関数は関数名の後に()が付きます。()の中には引数が必要なものもあります。
複数の引数が必要な場合はカンマで区切ります。引数としては定数、変数、関数、式などが利用できます。
MyBasicで提供される関数は次の5つのカテゴリーに分けることができます。
1. ダイアログ関数
2. ファイルパスの分解
3. 変換関数
4. 文字列操作
5. その他
1. ダイアログ関数
このカテゴリーの関数はダイアロクボックスを開いて選択または入力した値を返します。
入力ファイルダイアログ
入力用ファイルを選択してファイル名を返します。
中止の場合はNull("")を返します。
構文
InputFileDialog(title, initdir)
title | ダイアログのタイトルを文字列で指定します。 |
initdir | 初期表示フォルダを文字列で指定します。 |
出力ファイルダイアログ
出力用ファイルを選択してファイル名を返します。
中止の場合はNull("")を返します。
構文
OutputFileDialog(title, initdir)
title | ダイアログのタイトルを文字列で指定します。 |
initdir | 初期表示フォルダを文字列で指定します。 |
文字列入力ダイアログ(未対応)
文字列を入力して入力した文字列を返します。
中止の場合はNull("")を返します。
構文
StrInputDialog(title, initstr)
title | ダイアログのタイトルを文字列で指定します。 |
initstr | 初期表示入力文字列を指定します。 |
選択ダイアログ(未対応)
ラジオボタンにより複数の選択項目から1つを選びます。
最高5つまでの項目が選べます。選択した項目番号(1~5)を返します。
中止の場合は0を返します。
構文
SelectDialog(title, selid1, selid2,[selid3]...)
title | ダイアログのタイトルを文字列で指定します。 |
selid1, selid2 … | 項目のタイトルを文字列指定します。 |
メッセージボックス
メッセージボックスを表示します。
OKまたはYesならTrue(-1)、中止またはNoならFalse(0)を返します。
構文
MsgBox(prompt, buttom)
prompt | メッセージボックスに表示するメッセージを文字列で指定します。 |
buttom | ボタンの種類を数値で指定します。 0:OKのみ 1:OKとCANCEL 2:YesとNo |
2. ファイルパスの分解
このカテゴリーの関数はファイルパスを分解して、ドライブ名やフォルダー名を返します。
ドライブ名の取得
ファイルパスよりドライブ名を取得し返します。
構文
GetDriveName(path)
path | パスを文字列で指定します。 |
フォルダー位置の取得
ファイルパスよりフォルダー位置を取得し返します。
構文
GetFolderName(path)
path | パスを文字列で指定します。 |
ベース名の取得
ファイルパスよりベース名を取得し返します。
構文
GetBaseName(path)
path | パスを文字列で指定します。 |
拡張子の取得
ファイルパスより拡張子を取得し返します。
構文
GetExtentName(path)
path | パスを文字列で指定します。 |
3. 変換関数
このカテゴリーの関数は数値を文字列に、文字列を数値に変換して返します。
数値から文字列へ
数値を文字列に変換します。
構文
Str(num)
num | 変換する数値です。 |
文字列から数値へ
文字列を数値に変換します。小数も可能です。
構文
Val(str)
str | 変換する文字列です。 |
数値から文字列へ(書式指定)
数値を書式指定で文字列に変換します。
構文
Format(num, format, [decimal], [invalid])
num | 変換する数値です。 |
format | 書式。次の文字より構成する文字列です。 , カンマの位置を現します。 . 実少数点の位置を現します。 V 仮想小数点の位置を現します。(小数点は表示されません) 9 0 数字を現します。 Z # 数字を現します。 整数部先頭および整数部末尾にある場合はゼロ表示は抑制されます。 数字の表示長さは書式文字列の長さに等しくなります。(仮想小数点の場合は-1) (例) "###,##9.9" |
decimal | 小数点位置がformat指定と異なる場合に正しい小数点位置を指定します。 |
invalid | 無効数値を指定します。Numがこの値に等しい場合、関数は空白を返します。 |
西暦年から和暦年へ
西暦を和暦に変換し和暦の年を数値で返します。
構文
Wareki(year)
year | 西暦の年度です。 |
年号
西暦を和暦に変換したときの年号を文字列で返します。
構文
Nengo(year)
year | 西暦の年度です。 |
曜日
年月日(西暦)に対応した曜日を0~6(日~土)の数字で返します。
構文
Week(year, month, day)
year | 西暦の年度です。 |
month | 月の数値です。 |
day | 日の数値です。 |
英語の月の名前
月に対する英語の名を3桁の文字列で返します。(1:JUN 2:FEB・・)
構文
MonthName(month)
month | 月の数値です。 |
英語の曜日の名前
曜日に対する英語の名を3桁の文字列で返します。(0:SUN 1:MON・・・)
構文
WeekName(week)
week | 週を表す数値0~6(日~土)の数値です。 |
日本語の曜日の名前
曜日に対する日本語の名を漢字1桁の文字列で返します。(0:日 1:月・・・)
構文
JWeekName(week)
week | 週を表す数値0~6(日~土)の数値です。 |
郵便番号
住所文字列を郵便番号(数値)に変換して返します。
別売の郵便番号パックが必要です。
構文
Zip(address)
address | 県名または市町村名から始まる住所文字列の数値です。 |
4. 文字列操作
このカテゴリーの関数は文字列を加工して別の文字列を返します。
左部分文字列
文字列の左より長さlenの部分文字列を得ます。
最後が全角の半分になる場合は、範囲が縮小されます。
構文
Left(str, len)
str | 元の文字列です。 |
len | 取得長さです。 |
右部分文字列
文字列の右より長さlenの部分文字列を得ます。
先頭が全角の半分になる場合は、範囲が拡大されます。
構文
Right(str, len)
str | 元の文字列です。 |
len | 取得長さです。 |
中央部分文字列
文字列の左よりpos番目の位置より長さlenの部分文字列を得ます。
先頭が全角の半分になる場合は、範囲が拡大されます。
最後が全角の半分になる場合は、範囲が縮小されます。
構文
Mid(str, pos, len)
str | 元の文字列です。 |
pos | 開始位置です。 |
len | 取得長さです。 |
文字列整理
文字列の前後の空白を取り除いた文字列を得ます。
構文
Trim(str)
str | 元の文字列です。 |
長さ調整
文字列を指定の長さに調整した文字列を得ます。長さは半角文字の文字数で指定し、全角文字は2文字と数えます。文字列が短い場合は半角の空白が末尾に追加されます。長い場合は後ろを切り取ります。全角の途中で切れる場合は半角の空白に置き換えられます。
構文
Adjust(str, len)
str | 元の文字列です。 |
len | 半角での調整長さです。 |
単語取得
文字列 をセパレータ文字列に含まれる区切文字で区切り、指定番目の部分文字列を取得します。
(例) GetWord("YAMADA-TARO/SUZUKI-ICHIRO", 2, "-/") は "SUZUKI" になります。
構文
GetWord(str, idx, [sep])
str | 元の文字列です。 |
idx | 取得する区切り文字で区切られた単語の番号です。(0,1,2,・・・) |
sep | 文字列を単語に分けるための区切文字を連ねたセパレータ文字列です。区切り文字はセパレータ文字列に含まれるは半角および全角の1文字で複数指定できます。 セパレータ文字列を省略した場合は区切り文字はカンマと空白になります。 (例)セパレータ文字列が "//"の場合文字/と/が区切り文字となります。 |
返信タイトル作成
与えられた通信文のタイトルより、先頭の「RE」より返信回数を調べ、新しく返信回数を現す文字列を付け加えます。
(例) ResTitle("RE^2こんにちは")は "RE^3こんにちは" になります。
構文
ResTitle(title)
title | 通信文のタイトルです。 |
5. その他
その他の上記カテゴリーに属さない関数です。
空白
n桁の半角空白を現す文字列です。
構文
Space(n)
n | 空白の桁数です。 |
タブ
n個のタブを現す文字列です。
構文
TAB(n)
n | タブの桁数です。 |
文字
ASCIIコード(0~255)に対応する1桁の文字列です。
構文
Chr(n)
n | ASCIIコード(0~255)です。 |
ファイルの有無
指定したファイル(パスも含む)が存在するかどうかを検査します。在ればTrue(-1)を返し、無ければFalse(0)を返します。
構文
IsExist(file)
file | パスも含むファイル名です。 |