2017年11月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    
無料ブログはココログ

« MidA(文字列, 開始バイト位置, バイト長)関数を作る(VBA) | トップページ | LeftA(文字列, バイト長)とMidA(文字列, 開始バイト位置, バイト長)関数を作る(VB.NET) »

2008年10月 3日 (金)

MidA(文字列, 開始バイト位置, バイト長)関数を作る(VB.NET)

更に、VB.NETに焼き直し。

Public Class Class1
Public Shared Sub Main()
MsgBox(MidA("abcdefg", 3, 2))
MsgBox(MidA("あいうefg", 3, 2))
MsgBox(MidA("あいうefg", 3, 3))
MsgBox(MidA("aいうefg", 3, 2))
MsgBox(MidA("aいうefg", 3, 3))
End Sub

Private Shared Function MidA(Str As String, bStart As Integer, bLength As Integer) As String
Dim aStart As Integer = 0
Dim aLength As Integer = -1
Dim bPosition As Integer = 1
Dim aPosition As Integer
For aPosition = 1 To Len(Str)
  If aStart = 0 Then
    If bStart = bPosition Then
      aStart = aPosition
    ElseIf bStart < bPosition Then
      aStart = aPosition - 1
      bStart = bPosition - 2
    End If
  Else
    If bStart + bLength = bPosition Then
      aLength = aPosition - aStart
      Exit For
    ElseIf bStart + bLength < bPosition Then
      aLength = aPosition - aStart - 1
      bLength = bPosition - bStart - 2
      Exit For
    End If
  End If
  bPosition = bPosition + 1 - (Asc(Mid(Str, aPosition, 1)) < 0)
Next
If aStart Then
  If aLength = -1 Then
    aLength = aPosition - aStart
    bLength = bPosition - bStart
  End If
  MidA = Mid(Str, aStart, aLength)
End If
End Function
End Class

引数の位置と長さに、補正後の値を返してほしいときは、ByRefに変えてください。

« MidA(文字列, 開始バイト位置, バイト長)関数を作る(VBA) | トップページ | LeftA(文字列, バイト長)とMidA(文字列, 開始バイト位置, バイト長)関数を作る(VB.NET) »