ja, auch ich hab mal wieder ein kleines Problem.
Und zwar will ich in einem Text etwas suchen und ersetzen. Dieser Text befindet sich aber weder in Calc noch im Writer, sondern er wird aus einer Online HTML-Seite (WWW) ausgelesen und er befindet sich in folge dessen im Arbeitsspeicher.
Nun ja, ich habe da wohl etwas was funktioniert, aber ich frage mich ob man das nicht auch vereinfachen kann. Es geht darum das bestimmte HTML-Codes für deutsche Umlaute (und ein paar Sonderzeichen) ersetzt werden sollen. Eigentlich heißt das zu ersetzende "NCR dez", aber der einfachheithalber bleibe ich im weiteren Verlauf bei HTML-Code.
Als minimalstes Beispiel:
ß steht für ß
Also aus weiß soll weiß werden.
Bei nur einem HTML-Code ist das ja gar kein Problem. Aber anders sieht das aus, wenn man z.B. so einen Text nehmen würde:
Wäster Überflutet Örtliche Augenärzte, nix ist mehr weiß.
Übersetzt heißt er:
Wäster Überflutet Örtliche Augenärzte, nix ist mehr weiß.
Mein gesamter Code dafür sieht wie folgt aus (Beispieldatei im Anhang).
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ß."
'sTmpNameX = ""
'____________________________________________________________________________________________
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
Als erstes wird überprüft ob der Text überhaupt HTML-Codes hat, die mit &# anfangen. Und wenn ja, wie oft kommt das vor.
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.
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.
Erst wenn der gesamte String "Buchstabe für Buchstabe" abgearbeitet wurde, wird der so bereinigte String mittels PRINT ausgegeben.
Wie schon gesagt, er funktioniert. Aber so richtig elegant sieht er nicht aus. Und da ja nicht in einem Dokument gearbeitet wird, obwohl das Makro aus einer Calc-Datei gestartet wird, kann ich auch nicht mit einem createReplaceDescriptor arbeiten.
Wer hätte da einen Vorschlag das eleganter zu lösen?
Aber bitte kein Python, dafür habe ich momentan keine Zeit und Lust.
Ach ja, beinahe vergessen.
Der gezeigte Text ist von der Länge und der Anzahl an HTML-Codes schon reichlich übertrieben. Im Durchschnitt ist er eigentlich bedeutend kürzer.
Freue mich schon auf Eure Antworten und Hilfe.
Gruß
balu