文字列を置換するアルゴリズムです。
●使い方
コード: 全て選択
置換された文字列 = SubstitutionText(置換対象文字列,置換したい文字列,置換する文字列)
buffer = SubstitutionText("aaaaabbbcccdddeeee","bbb","fffffff")
↓
buffer の中身 = aaaaafffffffcccdddeeee
コード: 全て選択
Function SubstitutionText(BaseData As BytePtr,SearchText As BytePtr,SubText As BytePtr) As BytePtr
Dim StartPos As Long
Dim EndPos As Long
Dim Text As String
Dim buffer As BytePtr
Dim Length As Long
Dim SubTextLen As Long
StartPos = 1
EndPos = 1
buffer = NULL
SubTextLen = lstrlen(SubText)
Do
'debug
StartPos = InStr(StartPos,BaseData,MakeStr(SearchText))
'開始文字がなければループを抜ける
If StartPos <= 0 Then
Text = Mid$(MakeStr(BaseData),EndPos)
If buffer = NULL Then
buffer = malloc(lstrlen(buffer)+lstrlen(Text) + 1)
lstrcpy(buffer,Text)
Else
buffer = realloc(buffer,lstrlen(buffer)+lstrlen(Text) + 1)
lstrcat(buffer,Text)
End If
Exit Do
End If
'スタートポジションまでを変数に格納
If StartPos <> EndPos Then
Text = Mid$(MakeStr(BaseData),EndPos,StartPos - EndPos)
End If
If buffer = NULL Then
buffer = malloc(StartPos)
lstrcpy(buffer,Text)
Else
buffer = realloc(buffer,lstrlen(buffer) + lstrlen(Text) + 1)
lstrcat(buffer,Text)
End If
'置換処理
buffer = realloc(buffer,lstrlen(buffer) + SubTextLen + 1)
lstrcat(buffer,SubText)
'終了ポジションを確定
EndPos = StartPos + lstrlen(SearchText)
'スタートポジションを進める
StartPos = StartPos + lstrlen(SearchText)
Loop
SubstitutionText = buffer
End Function