von balu » Mi, 30.05.2018 00:23
Hallo!
Auch wenn es schon eine weile her ist, so möchte ich dennoch eine weitere mögliche Lösung zeigen.
Das verrückte an der Sache ist jetzt aber, die Lösung hatte ich eigentlich schon zu Anfang gepostet, der Code muss lediglich ein klein wenig entschlackt werden.
Ich zitiere mich jetzt mal selbst.
Als erstes wird überprüft ob der Text überhaupt HTML-Codes hat, die mit &# anfangen. Und wenn ja, wie oft kommt das vor.
Das bleibt bestehen. Denn das "wie oft" wird gleich noch benötigt.
Als nächstes, wenn die Bedingung zutrifft, wird mit der gleichen Methode wie vorher noch mal der HTML-Code abgezählt. Nur werden jetzt aber ab der Fundstelle wo der HTML-Code beginnt, 6 Zeichen ausgelesen und mit einem 2 Spaltigem Array verglichen und gegen das richtige Zeichen ausgetauscht. Das geschieht mittels REPLACE.
Die Funktion REPLACE bleibt das Dreh und Angelzentrum. Jedoch werden nun keine 6 Zeichen gesucht und ersetzt. Denn da ja ein vorgegebenes Array mit den Codes und den Ersetzungen schon existiert, braucht REPLACE nur zu vergleichen ob z.B. das Wort
µ in dem *zerstümmelten* Text vorhanden ist. Und wenn ja, dann wird es halt ganz einfach durch das passende Zeichen aus dem Array ersetzt.
REPLACE schreibt den jetzt geänderten Text in einen Temporären String. Und wenn noch nicht alle HTML-Codes mittels REPLACE getauscht wurden, wird dieser Temporäre String ein erneutes mal überprüft, abgezählt und getauscht.
Das erneute überprüfen und abzählen entfällt einfach. Aber der Temporäre String muss bestehen bleiben, da es ohne ihm nicht geht.
Erst wenn der gesamte String "Buchstabe für Buchstabe" abgearbeitet wurde, wird der so bereinigte String mittels PRINT ausgegeben.
Der bereinigte String wird auch wieder mit PRINT ausgegeben, aber das mit dem "Buchstabe für Buchstabe" entfällt ganz einfach, da ja "Wörter" aus den Array getauscht werden.
Hier noch mal der Ursprüngliche Code (überflüssige Leerzeilen entfernt), damit man nicht andauernd nach oben scrollen muss.
Code: Alles auswählen
sub tete2
dim NCRdez(1 to 2, 1 to 13) as String
NCRdez(1,1) = "µ" : NCRdez(2,1) = "µ"
NCRdez(1,2) = "¼" : NCRdez(2,2) = "¼"
NCRdez(1,3) = "½" : NCRdez(2,3) = "½"
NCRdez(1,4) = "¾" : NCRdez(2,4) = "¾"
NCRdez(1,5) = "Ä" : NCRdez(2,5) = "Ä"
NCRdez(1,6) = "Ö" : NCRdez(2,6) = "Ö"
NCRdez(1,7) = "Ø" : NCRdez(2,7) = "Ø"
NCRdez(1,8) = "Ü" : NCRdez(2,8) = "Ü"
NCRdez(1,9) = "ß" : NCRdez(2,9) = "ß"
NCRdez(1,10) = "ä" : NCRdez(2,10) = "ä"
NCRdez(1,11) = "ö" : NCRdez(2,11) = "ö"
NCRdez(1,12) = "ø" : NCRdez(2,12) = "ø"
NCRdez(1,13) = "ü" : NCRdez(2,13) = "ü"
sTmpNameX = "Wäster Überflutet Örtliche Augenärzte, und nu is nix mehr weiß."
'____________________________________________________________________________________________
ix = 0
for r = 1 to Len(sTmpNameX)
if Mid(sTmpNameX, r, 2) = "&#" then
ix = ix + 1
end if
next r
print "IX = Insgesamt zu ersetzen: " & ix
'____________________________________________________________________________________________'
if ix >= 1 then
sTmpX = sTmpNameX
for iti = 1 to ix
for r2 = 1 to Len(sTmpX)
if Mid(sTmpX, r2, 2) = "&#" then
sErsetzen = Mid(sTmpX, r2, 6)
for r3 = 1 to 13
if sErsetzen = NCRdez(1, r3) then
sTmpX2 = REPLACE(sTmpX, NCRdez(1, r3), NCRdez(2, r3))
sTmpX = sTmpX2
end if
next r3
end if
next r2
next iti
PRINT sTmpX
else
Print "Nix is!"
end if
end sub
Und hier jetzt der gekürzte Code.
Code: Alles auswählen
sub tete2
dim NCRdez(1 to 2, 1 to 13) as String
NCRdez(1,1) = "µ" : NCRdez(2,1) = "µ"
NCRdez(1,2) = "¼" : NCRdez(2,2) = "¼"
NCRdez(1,3) = "½" : NCRdez(2,3) = "½"
NCRdez(1,4) = "¾" : NCRdez(2,4) = "¾"
NCRdez(1,5) = "Ä" : NCRdez(2,5) = "Ä"
NCRdez(1,6) = "Ö" : NCRdez(2,6) = "Ö"
NCRdez(1,7) = "Ø" : NCRdez(2,7) = "Ø"
NCRdez(1,8) = "Ü" : NCRdez(2,8) = "Ü"
NCRdez(1,9) = "ß" : NCRdez(2,9) = "ß"
NCRdez(1,10) = "ä" : NCRdez(2,10) = "ä"
NCRdez(1,11) = "ö" : NCRdez(2,11) = "ö"
NCRdez(1,12) = "ø" : NCRdez(2,12) = "ø"
NCRdez(1,13) = "ü" : NCRdez(2,13) = "ü"
sTmpNameX = "Wäster Überflutet Örtliche Augenärzte, und nu is nix mehr weiß."
'____________________________________________________________________________________________
ix = 0
for r = 1 to Len(sTmpNameX)
if Mid(sTmpNameX, r, 2) = "&#" then
ix = ix + 1
end if
next r
print "IX = Insgesamt zu ersetzende NCRdez-Codes: " & ix ' <- Diese Zeile braucht man nicht unbedingt. Kann also gelöscht werden.
'____________________________________________________________________________________________
sTmpX = sTmpNameX
for r2 = 1 to ix
for r3 = 1 to 13
sTmpX2 = REPLACE(sTmpX, NCRdez(1, r3), NCRdez(2, r3))
sTmpX = sTmpX2
next r3
next r2
PRINT sTmpX
end sub
Der Zähler
ix muss deshalb bestehen bleiben, da in meinem Beispieltext das Wort
ä gleich 2 mal vorkommt. Nur dadurch werden diese beiden Wörter durch das
ä ersetzt. Ohne
ix, genauer gesagt ohne die
for r2 = 1 to ix gibt es nur eine Ersetzung.
Sieht doch eigentlich ganz gut aus, oder?
Gruß
balu
Hallo!
Auch wenn es schon eine weile her ist, so möchte ich dennoch eine weitere mögliche Lösung zeigen.
Das verrückte an der Sache ist jetzt aber, die Lösung hatte ich eigentlich schon zu Anfang gepostet, der Code muss lediglich ein klein wenig entschlackt werden.
Ich zitiere mich jetzt mal selbst.
[quote]
Als erstes wird überprüft ob der Text überhaupt HTML-Codes hat, die mit &# anfangen. Und wenn ja, wie oft kommt das vor.
[/quote]
Das bleibt bestehen. Denn das "wie oft" wird gleich noch benötigt.
[quote]
Als nächstes, wenn die Bedingung zutrifft, wird mit der gleichen Methode wie vorher noch mal der HTML-Code abgezählt. Nur werden jetzt aber ab der Fundstelle wo der HTML-Code beginnt, 6 Zeichen ausgelesen und mit einem 2 Spaltigem Array verglichen und gegen das richtige Zeichen ausgetauscht. Das geschieht mittels REPLACE.
[/quote]
Die Funktion REPLACE bleibt das Dreh und Angelzentrum. Jedoch werden nun keine 6 Zeichen gesucht und ersetzt. Denn da ja ein vorgegebenes Array mit den Codes und den Ersetzungen schon existiert, braucht REPLACE nur zu vergleichen ob z.B. das Wort [b]µ[/b] in dem *zerstümmelten* Text vorhanden ist. Und wenn ja, dann wird es halt ganz einfach durch das passende Zeichen aus dem Array ersetzt.
[quote]
REPLACE schreibt den jetzt geänderten Text in einen Temporären String. Und wenn noch nicht alle HTML-Codes mittels REPLACE getauscht wurden, wird dieser Temporäre String ein erneutes mal überprüft, abgezählt und getauscht.
[/quote]
Das erneute überprüfen und abzählen entfällt einfach. Aber der Temporäre String muss bestehen bleiben, da es ohne ihm nicht geht.
[quote]
Erst wenn der gesamte String "Buchstabe für Buchstabe" abgearbeitet wurde, wird der so bereinigte String mittels PRINT ausgegeben.
[/quote]
Der bereinigte String wird auch wieder mit PRINT ausgegeben, aber das mit dem "Buchstabe für Buchstabe" entfällt ganz einfach, da ja "Wörter" aus den Array getauscht werden.
Hier noch mal der Ursprüngliche Code (überflüssige Leerzeilen entfernt), damit man nicht andauernd nach oben scrollen muss.
[code]
sub tete2
dim NCRdez(1 to 2, 1 to 13) as String
NCRdez(1,1) = "µ" : NCRdez(2,1) = "µ"
NCRdez(1,2) = "¼" : NCRdez(2,2) = "¼"
NCRdez(1,3) = "½" : NCRdez(2,3) = "½"
NCRdez(1,4) = "¾" : NCRdez(2,4) = "¾"
NCRdez(1,5) = "Ä" : NCRdez(2,5) = "Ä"
NCRdez(1,6) = "Ö" : NCRdez(2,6) = "Ö"
NCRdez(1,7) = "Ø" : NCRdez(2,7) = "Ø"
NCRdez(1,8) = "Ü" : NCRdez(2,8) = "Ü"
NCRdez(1,9) = "ß" : NCRdez(2,9) = "ß"
NCRdez(1,10) = "ä" : NCRdez(2,10) = "ä"
NCRdez(1,11) = "ö" : NCRdez(2,11) = "ö"
NCRdez(1,12) = "ø" : NCRdez(2,12) = "ø"
NCRdez(1,13) = "ü" : NCRdez(2,13) = "ü"
sTmpNameX = "Wäster Überflutet Örtliche Augenärzte, und nu is nix mehr weiß."
'____________________________________________________________________________________________
ix = 0
for r = 1 to Len(sTmpNameX)
if Mid(sTmpNameX, r, 2) = "&#" then
ix = ix + 1
end if
next r
print "IX = Insgesamt zu ersetzen: " & ix
'____________________________________________________________________________________________'
if ix >= 1 then
sTmpX = sTmpNameX
for iti = 1 to ix
for r2 = 1 to Len(sTmpX)
if Mid(sTmpX, r2, 2) = "&#" then
sErsetzen = Mid(sTmpX, r2, 6)
for r3 = 1 to 13
if sErsetzen = NCRdez(1, r3) then
sTmpX2 = REPLACE(sTmpX, NCRdez(1, r3), NCRdez(2, r3))
sTmpX = sTmpX2
end if
next r3
end if
next r2
next iti
PRINT sTmpX
else
Print "Nix is!"
end if
end sub
[/code]
Und hier jetzt der gekürzte Code.
[code]
sub tete2
dim NCRdez(1 to 2, 1 to 13) as String
NCRdez(1,1) = "µ" : NCRdez(2,1) = "µ"
NCRdez(1,2) = "¼" : NCRdez(2,2) = "¼"
NCRdez(1,3) = "½" : NCRdez(2,3) = "½"
NCRdez(1,4) = "¾" : NCRdez(2,4) = "¾"
NCRdez(1,5) = "Ä" : NCRdez(2,5) = "Ä"
NCRdez(1,6) = "Ö" : NCRdez(2,6) = "Ö"
NCRdez(1,7) = "Ø" : NCRdez(2,7) = "Ø"
NCRdez(1,8) = "Ü" : NCRdez(2,8) = "Ü"
NCRdez(1,9) = "ß" : NCRdez(2,9) = "ß"
NCRdez(1,10) = "ä" : NCRdez(2,10) = "ä"
NCRdez(1,11) = "ö" : NCRdez(2,11) = "ö"
NCRdez(1,12) = "ø" : NCRdez(2,12) = "ø"
NCRdez(1,13) = "ü" : NCRdez(2,13) = "ü"
sTmpNameX = "Wäster Überflutet Örtliche Augenärzte, und nu is nix mehr weiß."
'____________________________________________________________________________________________
ix = 0
for r = 1 to Len(sTmpNameX)
if Mid(sTmpNameX, r, 2) = "&#" then
ix = ix + 1
end if
next r
print "IX = Insgesamt zu ersetzende NCRdez-Codes: " & ix ' <- Diese Zeile braucht man nicht unbedingt. Kann also gelöscht werden.
'____________________________________________________________________________________________
sTmpX = sTmpNameX
for r2 = 1 to ix
for r3 = 1 to 13
sTmpX2 = REPLACE(sTmpX, NCRdez(1, r3), NCRdez(2, r3))
sTmpX = sTmpX2
next r3
next r2
PRINT sTmpX
end sub
[/code]
Der Zähler [b]ix[/b] muss deshalb bestehen bleiben, da in meinem Beispieltext das Wort [b]ä[/b] gleich 2 mal vorkommt. Nur dadurch werden diese beiden Wörter durch das [b]ä[/b] ersetzt. Ohne [b]ix[/b], genauer gesagt ohne die [b]for r2 = 1 to ix[/b] gibt es nur eine Ersetzung.
Sieht doch eigentlich ganz gut aus, oder? 8)
Gruß
balu