polnische Sonderzeichen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

SoHo22
Beiträge: 2
Registriert: Sa, 07.07.2012 17:23

polnische Sonderzeichen

Beitrag von SoHo22 »

Hallo,
zunächst mal: ich bin absolute beginner.

Ich muss polnischen Text (jeweils 2-3 Wörter) in URLs umwandeln. Da URLs keine Sonderzeichen mögen, das Polnische aber geradezu davon wimmelt, möchte ich dieses Ersetzen automatisieren. Versucht habe ich es mit folgendem Makro:
----------------------------------------------------------------
'Attribute VB_Name = "modUmlauteErsetzen"
Sub polnischeSonderzeichen()
'Erweitern Sie das folgende Array, wenn
'weitere Buchstaben ersetzt werden sollen
Dim sSuchtext(18) As String
Dim sErsetzen(18) As String
'
sSuchtext(1) = "Ą"
sErsetzen(1) = "A"
sSuchtext(2) = "ą"
sErsetzen(2) = "a"
sSuchtext(3) = "Ć"
sErsetzen(3) = "C"
sSuchtext(4) = "ć"
sErsetzen(4) = "c"
sSuchtext(5) = "Ę"
sErsetzen(5) = "E"
sSuchtext(6) = "ę"
sErsetzen(6) = "e"
sSuchtext(7) = "Ł"
sErsetzen(7) = "L"
sSuchtext(8) = "ł"
sErsetzen(8) = "l"
sSuchtext(9) = "Ń"
sErsetzen(9) = "N"
sSuchtext(10) = "ń"
sErsetzen(10) = "n"
sSuchtext(11) = "Ó"
sErsetzen(11) = "O"
sSuchtext(12) = "ó"
sErsetzen(12) = "o"
sSuchtext(13) = "Ś"
sErsetzen(13) = "S"
sSuchtext(14) = "ś"
sErsetzen(14) = "s"
sSuchtext(15) = "Ź"
sErsetzen(15) = "Z"
sSuchtext(16) = "ź"
sErsetzen(16) = "z"
sSuchtext(17) = "Ż"
sErsetzen(17) = "Z"
sSuchtext(18) = "ż"
sErsetzen(18) = "z"



'
For i = 1 To 18
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
'
With Selection.Find
.Text = sSuchtext(i)
.Replacement.Text = sErsetzen(i)
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = True
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
'
Selection.Find.Execute Replace:=wdReplaceAll
Next i
End Sub
------------------------------------------------------------------

Leider erscheint immer folgende Fehlermeldung: BASIC-Laufzeitfehler. Ojektvariable nicht belegt. Es bezieht sich auf die Zeile

Selection.Find.Clear.Formatting

Wenn ich diese Zeile auskommentiere, erscheint die selbe Fehlermeldung, die sich dann auf die nächste Zeile

Selection.Find.Replacement.Clear.Formatting

bezieht.

Vielelicht ist meine Herangehensweise total daneben und naiv? Kann mir jemand helfen?

Vielen Dank und schöne Grüße
SoHo22
Karolus
********
Beiträge: 7535
Registriert: Mo, 02.01.2006 19:48

Re: polnische Sonderzeichen

Beitrag von Karolus »

Hallo

Versuchs mal damit:

Code: Alles auswählen

Sub sonderzeichenaustauschen
	doc = thisComponent 
	
	repl = doc.createReplaceDescriptor()

	repl.SearchAll = True
	repl.SearchCaseSensitive = True
	repl.SearchRegularExpression = False
	repl.SearchStyles = False
	repl.SearchWords = False

	searchchars = array( "ä","ö","ü" ) ' hier musst du deine Sonderzeichen eintragen
	replacechars = array( "a","o","u" ) 'und hier die Ersetzungen

	for i = 0 to ubound( searchchars )
		repl.SearchString = searchchars(i)
		repl.ReplaceString = replacechars(i)
		doc.replaceAll( repl )
	next i


End Sub
Das ist jetzt "nur" für drei Sonderzeichen, du schaffst das aber bestimmt selber anzupassen.

Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
SoHo22
Beiträge: 2
Registriert: Sa, 07.07.2012 17:23

Re: polnische Sonderzeichen

Beitrag von SoHo22 »

Ja, das war es. Super! Es hat einwandfrei funktioniert. Jetzt kann ich die Sonderzeichen rausschmeißen und gute URLs herstellen.

Danke!
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: polnische Sonderzeichen

Beitrag von balu »

Hallo SoHo22,

noch etwas Grundsätzliches was Du dir für die Zukunft merken musst.

Code: Alles auswählen

Dim sSuchtext(18) As String
Dim sErsetzen(18) As String
Damit deklarierst Du nicht 18 Array-Punkte, sondern 19. Die Zählung bei solchen Arrays fängt nämlich immer mit Null (0) an, und nicht wie Du denkst mit 1. Und folglich müsstest Du alles ändern.

Deklaration

Code: Alles auswählen

Dim sSuchtext(17) As String
Dim sErsetzen(17) As String
definition

Code: Alles auswählen

sSuchtext(0) = "Ą"
sErsetzen(0) = "A"
[...]
sSuchtext(17) = "ż"
sErsetzen(17) = "z"
Schleife

Code: Alles auswählen

For i = 0 To 17
[...]
Next i


Oder alternativ:
Deklaration

Code: Alles auswählen

Dim sSuchtext(1 to 18) As String
Dim sErsetzen(1 to 18) As String
Definition bleibt

Code: Alles auswählen

sSuchtext(1) = "Ą"
sErsetzen(1) = "A"
[...]
sSuchtext(18) = "ż"
sErsetzen(18) = "z"
Schleife

Code: Alles auswählen

For i = 1 To 18
[...]
Next i

Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Antworten