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