■ 現在のこのページの役立ち度:
表示されない場合こちらのリンクからもご覧になれます。
■ このページの役立ち度を評価する:
役立ち度を評価してください。
(1(左):あまり役立たない - 5(右):大変役立った):
■ ページの共有:
[ サイト内検索 ]
カスタム検索
#5715-0文字列の中の中間文字の変換についてせっきー1999-12-15(水) 18:56
     #5717-0RE#5715:文字列の中の中間文字の変換について魔界の仮面弁士1999-12-15(水) 19:32
     #5719-0RE#5715:文字列の中の中間文字の変換についてせつら1999-12-15(水) 19:43
#5715-0
文字列の中の中間文字の変換について
ご存じの方お教えいただければ幸いです。
ある文字列のなかから2文字を探しだし、見つかれば1文字に変換するということを行いたいと考えています(文字列は1文字文短くなる)。

例えば文字列「abcdefg」に文字列「cd」があった場合「z」に変換するということを行った場合、こうすればいいと思っていました。
*********************************************
    A="abcdefg"
    B="cd"
    C="z"

    for i=1 to len(A)
        if mid(A,i,2)=B then
            mid(A,i,2)=C
        end if
    next i

*********************************************

ところが、結果は「abzdefg」となります。期待している結果は「abzefg」です。
mid関数の使い方が間違っているのでしょうか?
#5717-0
RE#5715:文字列の中の中間文字の変換について
> ある文字列のなかから2文字を探しだし、見つかれば1文字に変換するということを行いたいと
> 考えています(文字列は1文字文短くなる)。
こんなことできます掲示板のログに、文字列置換関数のサンプルを書いたことがあります。


> ところが、結果は「abzdefg」となります。期待している結果は「abzefg」です。
> mid関数の使い方が間違っているのでしょうか?
Mid関数の使い方は間違っていないと思いますよ。
違うのは、Midステートメントの使い方ですね。(^^;
# この2つ、似ているので混同しないようにしましょう。

Midステートメントは、同じ長さの文字列でしか有効に働きません。
置換後の文字列が長ければ、その差分は切り捨てられ、無視されますし、
逆に短ければ、足りない部分の文字列は置き換えられず、そのままの文字が戻されます。
#5719-0
RE#5715:文字列の中の中間文字の変換について
VB6 なら置換用の関数が増えているので、これでできるような気がします。

現在のロジックで行くなら、置き換えではなく、別な文字列に追加していく必要があるでしょう。

    For i = 1 To Len(A)
        If Mid(A, i, 2) = B Then
            D = D + C
        Else
            D = D + Mid(A, i, 1)
        End If
    Next i

こんな感じですか。

ただし、1文字調べるのに2回ずつチェックしているのが、もっと長い文字列になったときに遅さの
原因になりそうで、ちょっと嫌です。(そんなに遅くはないですけどね) だから、こんな感じのコ
ーディングも知っておいた方が良いかと思います。

Private Sub Command1_Click()
    Const cOrg As String = "abcdefg"
    Const cRepO As String = "cd"
    Const cRepN As String = "z"
    Dim cw As String
    Dim iLen As Integer
    Dim iSt As Integer
    Dim iEd As Integer

'*** 先頭 ***
    cw = ""
    iLen = Len(cOrg)
    iSt = 1
    iEd = InStr(cOrg, cRepO)

'*** 代入 ***
    While iEd
        cw = cw + Mid(cOrg, iSt, iEd - iSt) + cRepN
        iSt = iEd + 1
        iEd = InStr(iSt, cOrg, cRepO)
    Wend

'*** 残り ***
    If iLen <> iSt Then
        cw = cw + Right(cOrg, iLen - iSt + 1)
    End If

    MsgBox cw
End Sub
このページと関連する記事:
#6986-0ディレクトリ検索方法2000-03-29(水) 17:33
#35642-0RE#35639:文字列比較2000-12-19(火) 13:16
#22170-0テキストファイルの1行読み取り2001-08-04(土) 11:43
#28614-0続・ファイル内の文字列を置換したい。2002-05-10(金) 14:57
#23724-0頭文字を英字のみ2001-10-13(土) 18:36
#2145-0フォルダの連続作成2002-05-09(木) 17:52
#19270-0RE#19269:IF文について2001-03-02(金) 19:35
#6677-0文字列から特定の部分を抜き出す1999-10-05(火) 18:38
#26925-0IF文2002-02-18(月) 13:22
#307-0Replace関数について1999-07-27(火) 19:44
お探しの情報は見つかりましたか?お困りの問題は解決しましたか?
サイト内検索, 似た記事検索で見つからなくてもあきらめずに掲示板で質問してみましょう。
VB初心者友の会があなたのお役に立てれば幸いです。また、本ページの投稿者の方々にこの場を借りて感謝致します。
本ページは過去ログを集めて自動構成しています。よろしければこのページに関するフィードバックをお願いします。
(※ 構成の誤り、広告等の不適切な記事、リンク切れ、読めないページの報告など)