jo, hab ich, deswegen hab ich es ja geschrieben ...
Code: Alles auswählen
Procedure.s Language(Group$, Name$)
Static Group.l ; for quicker access when using the same group more than once
Protected String$, StringIndex, Result
Group$ = UCase(Group$)
Name$ = UCase(Name$)
String$ = "##### String not found! #####" ; to help find bugs
If LanguageGroups(Group)\Name$ <> Group$ ; check if it is the same group as last time
For Group = 1 To NbLanguageGroups
If Group$ = LanguageGroups(Group)\Name$
Break
EndIf
Next Group
If Group > NbLanguageGroups ; check if group was found
Group = 0
EndIf
EndIf
If Group <> 0
StringIndex = LanguageGroups(Group)\IndexTable[ Asc(Left(Name$, 1)) ]
If StringIndex <> 0
Repeat
Result = CompareMemoryString(@Name$, @LanguageNames(StringIndex))
If Result = 0
String$ = LanguageStrings(StringIndex)
Break
ElseIf Result = -1 ; string not found!
Break
EndIf
StringIndex + 1
Until StringIndex > LanguageGroups(Group)\GroupEnd
EndIf
EndIf
ProcedureReturn String$
EndProcedure
Die erste Schleife sucht eine Gruppe, die zweite Schleife sucht den Namen...
das dauert mit sicherheit länger (wenn man sehr viele Wörter hat) als alles in eine Map zu schmeisen und "nahezu" direkt auf ein Element zugreifen kann, auch wenn hier zB die Gruppe "gesavt" wird, und der Anfangsbuchstabe mit einem Index beschleunigt wird., was ja "anfänge" einer Map darstellt.
Das ist durch aus clever, nur jetzt löst die MAP das meiner Meinung nach ab !