37.文字列レジスタ命令

37.1.概要

文字列レジスタは英数字、カタカナ、漢字の文字列を格納します。それぞれのレジスタには最大で254文字を格納することが出来ます。文字列レジスタの数は標準で25個です。

文字列レジスタの数はコントロールスタート時に増やすことが出来ます。

数種類の文字列レジスタ命令があります。

  • 文字列レジスタの代入、モジレジ[x] =

  • 文字列レジスタの連結、モジレジ[x] +

  • 文字列レジスタの比較、モジレジ[x] <、>、=、<>、<=、>=

  • 文字列レジスタの長さ、レジ[y] = モジレジ_ナガサ モジレジ[x]

  • 文字列レジスタの部分文字列の検索、レジ[y] = モジレジ_ケンサク モジレジ[x]、モジレジ[z]

  • 文字列レジスタの部分文字列の取出し、モジレジ[x] = モジレジ_トリダシ モジレジ[n]、レジ[y]、レジ[z]

文字列レジスタは直接指定や間接指定を使って指定することができます。

37.2.文字列レジスタの代入と連結

モジレジ[x]命令は文字列レジスタを処理します。文字列レジスタは、代入と連結を行うことができます。

図244.文字列レジスタの代入

文字列レジスタの代入

文字列レジスタ代入命令の例

モジレジ[x] = モジレジ[y]

モジレジ[x] = ヒキスウ[y]

モジレジ[x] = レジ[y]

レジ[x] = モジレジ[y]

図245.文字列レジスタの連結

文字列レジスタの連結

文字列レジスタ連結命令の例

モジレジ[x] = モジレジ[y] + モジレジ[z]

モジレジ[x] = モジレジ[y] + レジ[z]

モジレジ[x] = ヒキスウ[y] + モジレジ[z] + レジ[n]

文字列レジスタ命令は、自動的に数値データを変換します。自動変換については、37.3."文字列の変換と優先順位"で説明します。

37.3.文字列の変換と優先順位

レジスタ命令を使用した時、文字列と数値データの間の変換が自動的に行われます。

整数と小数のどちらも変換されます。小数は小数点以下6桁で四捨五入されます。

数値データを文字列へ変換する例

表46.モジレジ[x] = レジ[y]

レジ[y]の値 モジレジ[x]の結果
レジ[y]=1234 モジレジ[x]=’1234’
レジ[y]=12.34 モジレジ[x]=’12.34’
レジ[y]=5.123456789 モジレジ[x]=’5.123457’

文字列データから数値データへの変換が可能です。文字列データから数値への変換は文字が検出されるまで行われます。

文字列を数値データに変換する例

表47.レジ[x] = モジレジ[y]

モジレジ[y] の値 レジ[x] の結果
モジレジ[y]=’1234’ レジ[x] = 1234
モジレジ[y]=’12.34’ レジ[x]=12.34
モジレジ[y]=’765abc’ レジ[x]=765
モジレジ[y]=’fgh’ レジ[x]=0

命令の中で複数の変換が発生する時、データ型の変換には優先順位があります。データは演算子の左の命令のデータ型に変換されます。

変換の優先順位の例です。

表48.モジレジ[x] = レジ[y] + モジレジ[z]

レジ[y]=123.456 + モジレジ[z]=’345.678’ モジレジ[x]=’469.134’
レジ[y]=456 + モジレジ[z]='1abc2' モジレジ[x]='457'

表49.モジレジ[x] = モジレジ[y] + レジ[z]

モジレジ[y]=’123.’ + レジ[z]=345 モジレジ[x]=’123.345’
モジレジ[y]=’xyz’ + レジ[z]=81573 モジレジ[x]=’xyz81573’

37.4.モジ_ナガサ命令

モジ_ナガサ命令は指定された文字列レジスタに格納された文字列の長さを返します。

レジ[x] = モジ_ナガサ モジレジ[y]

図246.モジ_ナガサ命令

モジ_ナガサ命令

モジ_ナガサ命令の使用例

表50.レジ[x]=モジ_ナガサ モジレジ[y]

モジレジ[y]の値 レジ[x]の結果
モジレジ[y]=’abcdefghij’ レジ[x]=10
モジレジ[y]=’zyx1,2,3,4,5,6,lm’ レジ[x]=17
モジレジ[y]=’’ レジ[x]=0

モジ_ナガサ命令がデータ型が文字列でない引数レジスタとともに使用された場合、タイプミスマッチのアラームが発生します。

37.5.モジ_ケンサク命令

モジ_ケンサク命令は、対象の文字列から検索文字列を検索し、対象の文字列の何文字目に検出されたかを返します。全ての文字列比較では、大文字と小文字を区別しません。対象文字列の中に検出文字列が見つからなかった場合、0を返します。

レジ[x] = モジ_ケンサク モジレジ[y]、モジレジ[z]

図247.モジ_ケンサク命令

モジ_ケンサク命令

モジ_ケンサク命令の使用例

表51.レジ[x] = モジ_ケンサク モジレジ[y]、モジレジ[z]

モジレジ[z] の値、モジレジ[y]=’コノ モジ ヲ サガシマス’ レジ[x]の結果
モジレジ[z]=’コノ’ レジ[x]=1
モジレジ[z]=’サガシマス’ レジ[x]=10
モジレジ[z]=’アリマセン’ レジ[x]=0
モジレジ[z]=’’ レジ[x]=0

モジ_ケンサク命令がデータ型が文字列でない引数レジスタとともに使用された場合、タイプミスマッチのアラームが発生します。

37.6.モジ_トリダシ命令

モジ_トリダシ命令は、指定された始点位置、文字列長さに基づいて、対象の文字列から取出した部分文字列を返します。

モジレジ[n] = モジ_トリダシ モジレジ[x]、レジ[y]、レジ[z]

図248.モジ_トリダシ命令

モジ_トリダシ命令

モジ_トリダシ命令の使用例

表52.モジレジ[n] = モジ_トリダシ モジレジ[x]、レジ[y]、レジ[z]

レジ[y]とレジ[z]の値、モジレジ[x] = ’コノ モジ ヲ トリダシマス’ モジレジ[x]の結果
レジ[y]=1,レジ[z]=2 モジレジ[x]=’コノ’
レジ[y]=10,レジ[z]=7 モジレジ[x]=’トリダシマス’
レジ[y]=5,レジ[z]=0 モジレジ[x]=’’

以下の状態ではオーバフローアラームが発生します。

  • 始点位置が0より小さいか等しい。

  • 文字列長さが0より小さい。

  • 始点位置が対象文字列の文字列長さより大きい。

  • 始点位置に文字列長さを加えると、対象文字列の長さより大きい。

データ型が文字列でない引数レジスタが対象文字列として使用された場合、タイプミスマッチのアラームが発生します。データ型が数値でない引数レジスタが始点位置や文字列長さとして使用された場合、タイプミスマッチのアラームが発生します。