社内SEの徒然なる日記

NetCOBOLのソース編集をExcelマクロで作ってみた(共通関数)

初めに

※ 本記事は、ExcelマクロでCOBOLソースを自動編集させるマクロを作る記事の第2話です。

共通関数

今回は、commonモジュールを作成します。
COBOLソース編集(プロジェクト)

ソース

バイト数を取得する関数を作ります。
単純にLenB関数を使用するとUnicodeの関係で、半角文字のバイト数が2とかになります。
なので、コード変換してからLenB関数でバイト数を取得しています。

' 機能 : 実際のバイト数を返す。
'
' 返り値 :
'
' 引き数 : ARG1 - バイト数を取得する文字列
'
' 機能説明 : 引数で指定された値のByte数を取得します。
'

Public Function K_LenByte(ByVal myValue As String) As Integer
'Unicodeからシステム規定コードに変換してから、Byte数を取得して返却します。
K_LenByte = LenB(StrConv(myValue, vbFromUnicode))
End Function


次に、文字列から指定した範囲の文字を取得する関数を作成します。
ようするに、mid関数のバイト対応ですね。

' 機能 : バイト数を使用した文字列取得
'
' 返り値 :
'
' 引き数 : ARG1 - 文字列を取得する文字列
' ARG2 - 開始位置(バイト数)
' ARG3 - 取得バイト数
'
' 機能説明 : 文字列から指定したバイト数で文字列を取得する
'

Public Function K_midByte(myValue, myStart As Integer, myLenByte As Integer) As String

'変数宣言
Dim myString As String '戻値
Dim myWorkStr As String '追加文字
Dim myGen As Integer '戻値のByte数
Dim i As Integer 'ループカウンタ

'戻値のByte数
myGen = 1

'1文字ずつ読み込んで、指定したバイト数の間は文字を追加出力する
For i = 1 To Len(myValue)

'追加用文字を取得します。
myWorkStr = Mid(myValue, i, 1)

'戻値のByte数が指定Byteの範囲内である
If myGen >= myStart And myGen <= myStart + myLenByte Then
'戻値に1文字追加する
myString = myString & myWorkStr
End If

'追加文字を含めたバイト数取得
myGen = myGen + K_LenByte(myWorkStr)

'戻値のByte数が出力範囲を超えた場合、ループを抜ける
If myGen >= myStart + myLenByte Then
Exit For
End If
Next

'終了処理
normalEnd:
K_midByte = myString
End Function


第1話(概要): NetCOBOLのソース編集をExcelマクロで作ってみた(概要)
第2話(共通関数): この記事です
第3話(専用関数): NetCOBOLのソース編集をExcelマクロで作ってみた(専用関数)
第4話(Cobolソース編集) : NetCOBOLのソース編集をExcelマクロで作ってみた(Cobolソース編集)
第5話(実行結果) : NetCOBOLのソース編集をExcelマクロで作ってみた(実行結果)

投稿記事の一覧:目次

次回

次回は、commonLocalモジュールを掲載します。
スポンサードリンク

PageTop

コメント


管理者にだけ表示を許可する