Zeichen im String austauschen

PingOfDeath1983

Grünschnabel
Hallo ;-)

Ich brauche dringend eine Funktion in VB die folgendes schafft:

- String Zeichen für Zeichen auswertet
- Das Zeichen soll mit einem Hex-Wert verglichen werden
(A --> 41)
- Wenn z.B. ein A gefunden wird soll es durch B ersetz werden.
- am ende muss ein String vorhanden sein.

Ich habe also eine "Liste" von Hex-Zeichen (Sonderzeichen ~ 67Stück) welche ich durch andere ersetzen muss. Die Tabelle welches Zeichen durch welches ersetzt werden muss liegt in Hex vor.

Würde mich sehr über Eure Hilfe freuen!

Meine Idee sah so aus:
Code:
        For i = 0 To (Len(charArray)) - 1
            charZeichen = charArray(i)
            For t = 0 To 67 - 1 'durchsuche Array mit 67Zeichen
                If charZeichen = charArrayInkompatibel(i) Then
                    'tausche
                End If
            Next
        Next

Gruß, PingOfDeath
 
Hier ein kleines Beispiel:
Visual Basic:
'Erstmal die Variablen dimensionieren, Namen kannst du natürlich ändern
Dim sText$, sRepWhat$, sRepWith$, sTemp$, cnt
'Ich leg mal einen Beispieltext sowie die Änderungen fest
'sText = "Ich bin ein Beispieltext"
sRepWhat = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmanoprstuvwxyz"
sRepWith = "BCDEFGHIJKLMNOPQRSTUVWXYZAbcdefghijklmanoprstuvwxyza"
'Gehe alle Buchstaben des Textes durch
For cnt = 1 To Len(sText)
 'Extrahiere den nächsten Buchstaben
 sTemp = Mid(sText, cnt, 1)
 'und finde sein Äquivalent in der Codetabelle
 sTemp = Mid(sRepWith, InStr(sRepWhat, sTemp), 1)
 'Dann noch im Text ersetzen
 Mid(sText, cnt, 1) = sTemp
Next cnt
Ich hab hier der Einfachheit halber dem Buchstaben das jeweilige Äquivalent zugewiesen, an der Stelle in der Variable sRepWith findet sich der Buchstabe, der den an der gleichen Stelle in sRepWhat stehenden Buchstaben im Ursprungstext ersetzt.


Der Doc!
 
.... und wie geht das mit HEX ?

Hallo und danke für Deine schnelle Antwort!

Die Tauschfunktion ist schonmal die richtige Richtung!
Jetzt habe ich aber noch ein Problem, es ist nämlich so, dass ich "Zeichen" wie "Zeilenumbruch" rausfiltern muss ... das würde ich dann durch "Leerzeichen" ersetzen.
Deswegen wollte ich das Ganze irgendwie auf HEX-Code umbiegen weil ich schon eine Tabelle habe in der Steht was mit welchem Zeichen getauscht werden muss:

Code:
.... 0xD4 => 0x93, 0xD2 => 0x94, 0xD6 => 0x95, 0xD5 => 0x96, 0xD8 => 0x97,
0xDE => 0x98, 0xDA => 0x99, 0xD9 => 0x9A, 0xDB => 0x9B, 0xDC => 0x9C,
0xBE => 0x9D, 0xDD => 0x9E, 0xE3 => 0x9F, 0xE2 => 0xA0, 0xE1 => 0xA1 .....

Ich weiss also nicht (?) wie ich das hin bekomme :

- wie ich die vorhandenen Daten (HEX) in ein Array bekomme
- (?) meinen Text-String in HEX umwandle (zeichenweise dachte ich mir)
- beides vergleiche
- evtl. austausche
- (?) AUSGETAUSCHTEN WERT WIEDER IN EINEN STRING BEKOMME

... ich hoffe Du bist so gnädig und hilfst mir noch ein wenig ?
Ich brauche also 2 Arrays (inkompatible Zeichen und Ersatz-Zeichen) und mein Umgewandeltes Zeichen aus dem String ....

Gruß, PingOfDeath
 
Natürlich geht es auch mit 2 Arrays, damit geht aber der Suchvorteil mittels InStr() flöten. Ich hab das mal so umgebaut, dass das ganze mit Hexzahlen funktioniert:
Visual Basic:
'Erstmal die Variablen dimensionieren, Namen kannst du natürlich ändern
Dim sText$, sRepWhat$, sRepWith$, sTemp$, cnt, iWhere&
'Ich leg mal einen Beispieltext sowie die Änderungen fest
sText = "ich bin ein beispieltext"
sRepWhat = "61.62.63.64.65.66.67.68.69.6A.6B.6C.6D.6E.6F.70.71.72.73.74.75.76.77.78.79.7A"
sRepWith = "62.63.64.65.66.67.68.69.6A.6B.6C.6D.6E.6F.70.71.72.73.74.75.76.77.78.79.7A.61"
'Gehe alle Buchstaben des Textes durch
For cnt = 1 To Len(sText)
 'Extrahiere den nächsten Buchstaben
 sTemp = Hex(Asc(Mid(sText, cnt, 1)))
 'Wenn gefunden
 iWhere = InStr(sRepWhat, sTemp)
 If iWhere > 0 Then
  'und finde sein Äquivalent in der Codetabelle
  sTemp = Mid(sRepWith, iWhere, 2)
  'Dann noch im Text ersetzen
  Mid(sText, cnt, 1) = Chr(Val("&H" & sTemp))
 End If
Next cnt
Die Zeichen und Äquivalente werden wie gewohnt in den String eingegeben (lassen sich auch aus einer Datei laden), diesmal gibst du aber deren Hex-Werte, getrennt durch Punkte (oder einem anderen Trennzeichen) ein. Das Trennzeichen hat den Sinn, dass es nicht zu Fehlinterpretationen bei der Suche kommen kann, wenn du z.B. "78797A7B" hast kann das System bei der Suche auch 87, 97 usw. finden, dann würden die Ersatzcodes nicht mehr passen. Durch das Trennzeichen kann das nicht passieren.

Ich hab außerdem noch eine Abfrage eingebaut, die nur dann das Zeichen ersetzt, wenn es tatsächlich einen Ersatzcode gibt. War für Testzwecke, wenn es das bei dir nicht gibt kannst du sie wieder ausbauen (Denk aber dann an eine Fehlerbehandlung).


Der Doc!
 
Zurück