Ich hatte mich ja schon einmal mit dem Mehrfach-Austausch von Strings beschäftigt.
Inzwischen gibt es sooo viele Möglichkeiten...
Hier einige Beispiele:
s = TranslateAll( Quelle$, von$, nach$ )
Das Original.
s = TranslateAll( Quelle$, mehrere_von$, mehrere_nach$, trenner$ )
Mit einem zusätzlichen Trenner einfach mehrere Such- und Ersatzstrings trennen.
s = TranslateAll( Quelle$, von$[], nach$[] )
Oder einfach in 2 dynamische Arrays setzen.
s = TranslateAll( Quelle$, von_und_nach$[], trenner$ )
Oder in ein dynamisches Array und das von und nach mit einem Trennzeichen versehen.
s = TranslateAll( Quelle$, von_und_nach_HASH[] )
Oder den Suchbegriff als Hash-Schlüssel und das zu Ersetzende als Hash-Wert.
Wenn man ein dynamisches Array mehrmals verwendet, dann sollte man nicht vergessen: SetSize dasArray[],0
Innerhalb der Funktion wird mittels SizeOf() die Größe ermittelt. Das kann sonst zu Überraschungen führen.
'auskommentieren für Release
$DEFINE DEBUG
Proc TranslateAll
// TranslateAll( Quelle$, mehrere_von$, mehrere_nach$, trenner$ )
// TranslateAll( Quelle$, von$, nach$ )
// TranslateAll( Quelle$, von$[], nach$[] )
// TranslateAll( Quelle$, von_und_nach$[], trenner$ )
// TranslateAll( Quelle$, von_und_nach_HASH[] )
Declare int PC,PCi, string PT : PC = %PCount : PT = "" : For PCi,1,PC : PT = PT + PType$(PCi) + "|" : EndFor
Declare int i, j, k, string kk,vv
$IFDEF DEBUG
print " // ";PT
$ENDIF
'-----------
If PC = 4
'===========
If (PT = "$|$|$|$|") // Translate$( Quelle$, mehrere_von$, mehrere_nach$, trenner$ )
Parameters string A4a,B4a,C4a,D4a
i = Len( B4a, D4a )
j = Len( C4a, D4a )
k = if(i < j,i,j)
For i,1,k
$IFDEF DEBUG
print " // ";SubStr$( B4a, i, D4a ),"->",SubStr$( C4a, i, D4a )
$ENDIF
A4a = Translate$( A4a, SubStr$( B4a, i, D4a ), SubStr$( C4a, i, D4a ) )
EndFor
Return A4a
EndIf
'-----------
ElseIf PC = 3
'===========
If (PT = "$|$|$|") // Translate$( Quelle$, von$, nach$ )
Parameters string A3a,B3a,C3a
$IFDEF DEBUG
print " // ";B3a,"->",C3a
$ENDIF
Return Translate$( A3a, B3a, C3a )
'===========
ElseIf (PT = "$|$[]|$[]|") // Translate$( Quelle$, von$[], nach$[] )
Parameters string A3b,B3b[],C3b[]
i = SizeOf(B3b[])
j = SizeOf(C3b[])
k = if(i < j,i,j)
For i,0,k - 1
$IFDEF DEBUG
print " // ";B3b[i],"->",C3b[i]
$ENDIF
A3b = Translate$( A3b, B3b[i], C3b[i] )
EndFor
Return A3b
'===========
ElseIf (PT = "$|$[]|$|") // Translate$( Quelle$, von_und_nach$[], trenner$ )
Parameters string A3c,B3c[],C3c
k = SizeOf(B3c[])
For i,0,k - 1
$IFDEF DEBUG
print " // ";SubStr$( B3c[i], 1, C3c ),"->",SubStr$( B3c[i], 2, C3c)
$ENDIF
A3c = Translate$( A3c, SubStr$( B3c[i], 1, C3c ), SubStr$( B3c[i], 2, C3c) )
EndFor
Return A3c
EndIf
'-----------
ElseIf PC = 2
'===========
If PT = "$|H[]|" // Translate$( Quelle$, von_und_nach_HASH[] )
Parameters string A2a, hash B2a[]
ForEach B2a[],kk,vv
$IFDEF DEBUG
print " // ";kk,"->",vv
$ENDIF
A2a = Translate$( A2a, kk, vv )
EndFor
Return A2a
EndIf
EndIf
'-----------
$IFDEF DEBUG
print " // ERROR"
$ENDIF
Return ""
EndProc
Declare string s_ori, s, A[], B[], hash H[]
Cls
s_ori = "<td align=\qalign1\q valign=\qvalign1\q bgcolor=\qHexColor\q class=\qtdclass1\q><font color=\qFontColor\q>derText</font></td>"
s = s_ori
Print " // TranslateAll( Quelle$, mehrere_von$, mehrere_nach$, trenner$ )"
s = TranslateAll( s, "FontColor|HexColor|derText|tdclass1|valign1|align1", "#FF0000|#FFFF00|Eintrag|Smaller|middle|center", "|" )
Print " "
Print s
Print " "
$IFDEF DEBUG
waitinput
$ENDIF
s = s_ori
Print " // TranslateAll( Quelle$, von$, nach$ ) --- nur ein Wert getauscht"
s = TranslateAll( s, "FontColor", "#FF0000" )
Print s
Print " "
$IFDEF DEBUG
waitinput
$ENDIF
s = s_ori
A[0] = "FontColor" : B[0] = "#FF0000"
A[1] = "HexColor" : B[1] = "#FFFF00"
A[2] = "derText" : B[2] = "Eintrag"
A[3] = "tdclass1" : B[3] = "Smaller"
A[4] = "valign1" : B[4] = "middle"
A[5] = "align1" : B[5] = "center"
A[6] = ""
Print " // TranslateAll( Quelle$, von$[], nach$[] )"
s = TranslateAll( s, A[], B[] )
Print s
Print " "
$IFDEF DEBUG
waitinput
$ENDIF
s = s_ori
SetSize A[],0
A[0] = "FontColor|#FF0000"
A[1] = "HexColor|#FFFF00"
A[2] = "derText|Eintrag"
A[3] = "tdclass1|Smaller"
A[4] = "valign1|middle"
A[5] = "align1|center"
Print " // TranslateAll( Quelle$, von_und_nach$[], trenner$ )"
s = TranslateAll( s, A[], "|" )
Print s
Print " "
$IFDEF DEBUG
waitinput
$ENDIF
s = s_ori
H["HexColor"] = "#FFFF00"
H["FontColor"] = "#FF0000"
H["derText"] = "Eintrag"
H["tdclass1"] = "Smaller"
H["valign1"] = "middle"
H["align1"] = "center"
Print " // TranslateAll( Quelle$, von_und_nach_HASH[] )"
s = TranslateAll( s, H[] )
Print s
Print " "
Print "ENDE"
WaitInput
End
Alles anzeigen