ページ 1 / 1
置き換え
Posted: 2006年5月23日(火) 18:41
by MML
エディタ(TextEditor)で置き換え機能を作ろうと思って
以下のようなスクリプトを書いたのですが、動きません。
どこが悪いか教えていただけないでしょうか、、、
コード: 全て選択
Function Replace(Mojiret As String,Okikae1 As String,Okikae2 As String,OMOJI As Byte) As String
Dim Mojisu1 As Long
Dim Mojisu2 As Long
Dim Num As Long
Dim Okikae3 As String
Dim Mojiret2 As String
Dim ST As Long
Mojisu1 = Len(Okikae1)
Mojisu2 = Len(Mojiret)
Num = 0
Okikae3 = ""
ST=0
Mojiret2 = ""
For Num=1 To Mojisu2
'置換処理。
Okikae3 = Mid$(Mojiret,Num,Mojisu1)
ST = CompareString(LOCALE_USER_DEFAULT,NORM_IGNORECASE,Okikae1,-1,Okikae2,-1)
if ST=CSTR_EQUAL Then
Mojiret2 = Mojiret2 & Okikae2
else
Mojiret2 = Mojiret2 & Okikae3
end if
Next
Replace = Mojiret2
End Function
文字列の置き換えについて
Posted: 2006年5月23日(火) 22:24
by omasu
お世話になります。
以下のプロシージャで実行できますでしょうか?
[ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]コード: 全て選択
Function Replace(Mojiret As String,Okikae1 As String,Okikae2 As String,OMOJI As Byte) As String
Dim Mojisu1 As Long
Dim Mojisu2 As Long
Mojisu1 = Len(Okikae1)
Mojisu2 = Len(Mojiret)
'置換処理。
While InStr(1,Mojiret,Okikae1)>0
Mojiret=Left$(Mojiret,InStr(1,Mojiret,Okikae1)-1)+Okikae2+Mid$(Mojiret,InStr(1,Mojiret,Okikae1)+Mojisu1,Mojisu2)
Wend
Replace = Mojiret
End Function
Re: 置き換え
Posted: 2006年5月24日(水) 11:50
by 7
昔どっかで文字列操作の関数群を見たことがあるんだけどな~っと思って「文字列操作 関数群」で検索してみたらあっさりと発見しました。
ActiveBasic用文字列操作モジュール
転載は許可なしに行っても構わないと書いてあるので転載させてもらいます。
製作者は三澤 慧さん。
なお、動作はAB3.07で確認しています、とのこと。
[ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]コード: 全て選択
'関数 : Replace$
' 指定した文字列中の指定した文字列を別の文字列に置換した文字列を返します。
'引数 :
' strExpression 検索する文字列を含む文字列
' strFind 検索する文字列
' strReplace 置換する文字列
Function Replace$( ByVal strExpression As String , ByVal strFind As String , ByVal strReplace As String ) As String
Dim i As Long
Dim lngReplaceStrLength As Long
Dim lngFindStrLength As Long
Replace$ = strExpression
lngFindStrLength= Len( strFind )
lngReplaceStrLength = Len( strReplace )
i = 1
Do
i = InStr( i , Replace$ , strFind )
If i > 0 Then
'直前までと直後からを抜き出して結合
Replace$ = Left$( Replace$ , i - 1 ) + strReplace + Mid$( Replace$ , i + lngFindStrLength )
'検索開始位置を変更(無限ループに陥らないため)
i = i + lngReplaceStrLength
Else
Exit Do
End If
Loop
End Function
あ~なるほど~こうやってやるんだ~と思いました。
文字列の置き換えについてⅡ
Posted: 2006年5月25日(木) 06:28
by omasu
お世話になります。
申し訳ありません。
検証不足で前回コードはバグがありました。
7さんの提示していただいたコードを参考に手直ししました。
7さんありがとうございます。
ついでに、検索する文字列が「NULL」でも可能としました。
[ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]コード: 全て選択
Function Replace(Mojiret As String,Okikae1 As String,Okikae2 As String,OMOJI As Byte) As String
Dim Mojisu1 As Long
Dim Mojisu2 As Long
Dim StartPos As Long
Mojisu1=Len(Okikae1)
Mojisu2=Len(Okikae2)
StartPos=InStr(1,Mojiret,Okikae1)
'置換処理。
While StartPos>0 And Mojisu1>0
Mojiret=Left$(Mojiret,StartPos-1)+Okikae2+Mid$(Mojiret,StartPos+Mojisu1)
StartPos=InStr(StartPos+Mojisu2,Mojiret,Okikae1)
Wend
Replace = Mojiret
End Function
追伸:InStr関数は検索開始位置を指定しても、
戻り値はその対象文字列の頭からの数値が返る・・・、今回初めて気づきました。
Re: 文字列の置き換えについてⅡ
Posted: 2006年5月25日(木) 16:00
by MML
こんにちは。返信遅れてすみません。
ゆちボンです。
置き換えの資料、コードなど、
いろいろとありがとうございました。