文字列 (Apache OpenOffice BASIC 実行時ライブラリ)

From Apache OpenOffice Wiki
Jump to: navigation, search
doc OOo


Book.png

文字コードの操作

Apache OpenOffice Basic の文字列操作では、文字コードとして Unicode が使用されます。Asc および Chr 関数は、Unicode のコード番号と該当する文字との間の変換を行います。次のサンプルコードでは、各種の Unicode 記号を該当するコード番号に変換します。

Code = Asc("A")         ' Latin letter A (Unicode-value 65)
Code = Asc("€")         ' Euro character (Unicode-value 8364)
Code = Asc("Л")         ' Cyrillic letter Л (Unicode-value 1083)

次のサンプルコードは、これらと逆方向の変換を実行します。

MyString = Chr(13)

ここでは、コード番号 13 が割り当てられている文字 (改行コード) を、文字列変数 MyString に代入しています。

このように、Chr 関数は、Basic プログラミング内で制御コードを文字列変数に代入する際によく使われます。たとえば、次のサンプルコードのように使用します。

MyString = Chr(9) + "This is a test" + Chr(13)

ここでは、文字列の前にタブコード (Unicode 値 9) を、後ろに改行コード (Unicode 値 13) を付けています。

文字列の一部の取得

Apache OpenOffice Basic には、文字列の一部の取得用に、次の 4 つの関数が用意されています。

Left(MyString, Length)
文字列 MyString の左端から Length 分の文字を取得します。
Right(MyString, Length)
文字列 MyString の右端から Length 分の文字を取得します。
Mid(MyString, Start, Length)
文字列 MyString の左端 Start 文字目から Length 分の文字を取得します。
Len(MyString)
文字列 MyString の文字数を返します。

次のサンプルコードは、これらの使用例です。

Dim MyString As String
Dim MyResult As String
Dim MyLen As Integer
 
MyString = "This is a small test"
MyResult = Left(MyString,5)      ' Provides the string "This "
MyResult = Right(MyString, 5)    ' Provides the string " test"
MyResult = Mid(MyString, 8, 5)   ' Provides the string " a sm"
MyLen = Len(MyString)            ' Provides the value 21

検索と置換

Apache OpenOffice Basic には、文字列内の部分文字列の検索用に、InStr 関数が用意されています。

ResultString = InStr (MyString, SearchString)

この関数は、文字列変数 MyString 内に文字列変数 SearchString と一致する部分があるかを調べます。関数の戻り値としては、文字列変数 MyString 内で最初に文字列変数 SearchString が現れる位置を、数値で返します。また、該当する部分文字列が何カ所もあるような場合は、Apache OpenOffice Basic が何文字目から検索を始めるかをオプション指定できます。このオプションは、次の形式で記述します。

ResultString = InStr(StartPosition, MyString, SearchString)

また上記のいずれの場合も、InStr 関数は文字列の大文字と小文字を無視します。InStr 関数で大文字と小文字を区別させるには、次のように最終パラメータとして 0 を追加します。

ResultString = InStr(MyString, SearchString, 0)

これまでに説明した文字列操作用の関数を組み合わせると、次のような文字列の置換関数を作成できます。

Function Replace(Source As String, Search As String, NewPart As String)
  Dim Result As String
  Dim StartPos As Long
  Dim CurrentPos As Long
 
  Result = ""
  StartPos = 1
  CurrentPos = 1
 
  If Search = "" Then
    Result = Source
  Else 
    Do While CurrentPos <> 0
      CurrentPos = InStr(StartPos, Source, Search)
      If CurrentPos <> 0 Then
        Result = Result + Mid(Source, StartPos, _
        CurrentPos - StartPos)
        Result = Result + NewPart
        StartPos = CurrentPos + Len(Search)
      Else
        Result = Result + Mid(Source, StartPos, Len(Source))
      End If                ' Position <> 0
    Loop 
  End If 
 
  Replace = Result
End Function

この関数は、ループ内に InStr 関数を配置して、文字列パラメータ Source 内にある文字列パラメータ Search の該当位置を検索します。検索がヒットしたら、該当位置より前の部分を取得して、バッファ用の文字列変数 Result に格納します。そして、文字列パラメータ Search の該当位置を置き換えるよう、新しい Part セクションを挿入します。上記の手順を繰り返し、検索する文字列の残りの部分に該当位置がなくなった段階で、この部分をバッファ用文字列の末尾に追加します。こうして得られた文字列を関数の戻り値として返しますが、これが該当箇所を置換した文字列となります。

このような文字列の一部を置換するという作業は使用頻度が高いため、Apache OpenOffice Basic の Mid 関数には、これを行うための拡張機能が用意されています。この例では、文字列 MyString の 6 文字目から 3 文字分を is という文字列に置き換えています。

Dim MyString As String
 
MyString = "This was my text"
Mid(MyString, 6, 3, "is")

文字列の書式設定

Format 関数は、数値を文字列として書式設定します。このような処理を行う際には、数値の書式設定用テンプレートを指定する必要がありますが、この関数ではパラメータ Format として指定します。テンプレートは、最終的に出力する文字種に対応したプレースホルダを並べて指定します。使用頻度の高いプレースホルダは、ゼロ (0)、ナンバー記号 (#)、ピリオド (.)、コンマ (,)、ドル記号 ($) の 5 種類です。

0 文字は、該当桁に数字を表示させるための記号です。該当桁に数値が来ない場合は、0 が表示されます。

. は、小数点の位置を指定するための記号で、小数点はオペレーティングシステムのロケール設定に応じたものが使用されます。

次のサンプルコードは、0. による書式指定により数値の小数部が処理される例を示します。

MyFormat = "0.00"
MyString = Format(-1579.8, MyFormat)     ' Provides "-1579,80"
MyString = Format(1579.8, MyFormat)      ' Provides "1579,80"
MyString = Format(0.4, MyFormat)         ' Provides "0,40"
MyString = Format(0.434, MyFormat)       ' Provides "0,43"

また、数値の整数部の桁数がテンプレートよりも小さい場合、該当桁には 0 が表示されます。

MyFormat = "0000.00"
MyString = Format(-1579.8, MyFormat)     ' Provides "-1579,80"
MyString = Format(1579.8, MyFormat)      ' Provides "1579,80"
MyString = Format(0.4, MyFormat)         ' Provides "0000,40"
MyString = Format(0.434, MyFormat)       ' Provides "0000,43"

, は、千単位の桁区切り位置を指定するための記号で、オペレーティングシステムのロケール設定に応じた桁区切り記号を表示させます。# は、該当桁の数字を表示させるよう指定する記号ですが、該当桁に数値が無い場合は何も表示させません。

MyFormat = "#,##0.00"
MyString = Format(-1579.8, MyFormat)     ' Provides "-1.579,80"
MyString = Format(1579.8, MyFormat)      ' Provides "1.579,80"
MyString = Format(0.4, MyFormat)         ' Provides "0,40"
MyString = Format(0.434, MyFormat)       ' Provides "0,43"

$ プレースホルダの代わりに、Format 関数は、システムで定義されている関連する通貨記号を表示します (次の例では、ヨーロッパロケールが定義されているものとします)。

MyFormat = "#,##0.00 $"   
MyString = Format(-1579.8, MyFormat)     ' Provides "-1.579,80 €" 
MyString = Format(1579.8, MyFormat)      ' Provides "1.579,80 €" 
MyString = Format(0.4, MyFormat)         ' Provides "0,40 €" 
MyString = Format(0.434, MyFormat)       ' Provides "0,43 €"

VBA で日時の詳細な書式設定用に使用されるフォーマット命令も使用できます。

sub main
    dim myDate as date
    myDate = "01/06/98"
    TestStr = Format(myDate, "mm-dd-yyyy") ' 01-06-1998
    MsgBox TestStr
end sub
Content on this page is licensed under the Public Documentation License (PDL).
Personal tools