ab.com コミュニティ https://www.activebasic.com/forum/ |
|
文字列置換アルゴリズム https://www.activebasic.com/forum/viewtopic.php?t=4561 |
ページ 1 / 1 |
作成者: | 水波形 [ 2014年6月20日(金) 03:51 ] |
記事の件名: | 文字列置換アルゴリズム |
やっとの思いで完成しました。 文字列を置換するアルゴリズムです。 ●使い方 コード: 置換された文字列 = 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 |
作成者: | たかせ [ 2014年6月20日(金) 19:26 ] |
記事の件名: | Re: 文字列置換アルゴリズム |
早速利用させていただきました。 ちなみに置換された文字列の格納領域は呼び出し側で不要になり次第Free関数で解放することを記載したほうが良いと思います。 2015年7月12日修正 |
ページ 1 / 1 | 全ての表示時間は UTC+09:00 です |
Powered by phpBB® Forum Software © phpBB Limited https://www.phpbb.com/ |