2016-09-04 1 views
1

文字列「appleapple」があるとします。 vb6では、すべて 'a'を 'e'で、すべてを 'e'で 'a'に置き換えたいとします。一度に複数置換vb6

私が使用している場合は私の所望の出力が「epplaeppla」

です:

str = "appleapple" 
str = Replace(str, "a", "e") 
str = Replace(str, "e", "a") 

しかし

Output will be : "applaappla" 

は1つの交換があるマルチ置き換える文字や単語に任意のより良い方法はありますこの種のケースのような別のものの影響を受けないか? 2つの置換の場合だけでなく、多くの置換が互いに影響を与える複数の場合について言います。

+3

'For'ループと' Mid $ 'を使用してください。 –

+0

2文字の間で常に切り替えるつもりはありますか? – nabuchodonossor

答えて

2

最も簡単で安全な方法は、ASCIIチャート(ASCIIコード0〜31の最上部)で一時的に使用されていない文字を置き換えて、最後の選択肢に置き換える2ステップの置換えを使用することです。

Full ASCII Chart

を見るこれは、単一の文字だけでなく、複数の文字の置換のために働く必要があり、典型的には、未使用の文字

Unused ASCII characters

の試料について以下の画像を参照してください。

Option Explicit 

' Use this to distinguish between upper and lower case replacements 
Option Compare Binary 

Public Sub SafeMultiReplace() 

    ' use something not in list of characters being searched or replaced 
    Const DELIM   As String = "," 

    Const START_STRING As String = "appleappleAPPLE" 

    Dim ReplaceString As String 
    Dim OutputString As String 

    Dim ChangeVars  As Variant 
    Dim ReplaceVars  As Variant 

    Dim i    As Integer 

    ' These two arrays must match total vars 
    ' Load array of many characters you want to change From 
    ChangeVars = Split("a,e", DELIM) 

    ' Load array of many characters you want to change to 
    ReplaceVars = Split("e,a", DELIM) 

    OutputString = START_STRING 

    ' Replace original chars with unused chars 
    For i = LBound(ChangeVars) To UBound(ChangeVars) 
     OutputString = Replace(OutputString, ChangeVars(i), Chr(i)) 
    Next i 

    ' Replace unused chars with replacement chars 
    For i = LBound(ReplaceVars) To UBound(ReplaceVars) 
     OutputString = Replace(OutputString, Chr(i), ReplaceVars(i)) 
    Next i 

    Debug.Print "Final Output: " & OutputString 
    'Final Output: epplaepplaAPPLE 

End Sub 
+0

VB6文字列はUnicode文字セットのUTF-16エンコーディングを使用するので、他の多くの現代言語のように、Chrの代わりにChrWを使用し、Unicode BMP全体から選択して未使用文字を見つけることができます。 –

+0

おそらく少し残酷です。彼の例は2つの文字のためのものでした - これはあなたに32を与えます - それはおそらく過剰です – dbmitch

関連する問題