Autor Beitrag
Leo1971
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26

Win 98, Win XP
D5 Ent, D2005 Arch, Prof
BeitragVerfasst: Di 20.06.06 08:28 
Hi,

ich bin dabei in verschiedenen Texten Worte zu separieren, Worte bestehen ja aus Buchstaben ;). Das ganze soll multilingual werden. Nun zu meiner Frage: Kennt jemand eine Möglichkeit auch WideChar (Char unter Net) auch in Mengen zu benutzen, so dass man dann auch die Form der Abfrage folgend nutzen könnte:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
Const INVALID_WORD_SEP_SLA = [#65 .. #90,   // Großbuchstaben von A bis Z sind keine Worttrenner
                              #97 .. #122,  // Kleinbuchstaben von a bis z sind keine Worttrenner
                              #256 .. #383// Zeichen 256 bis 383 sind keine Wortrenner
                              #48 .. #57,   // Zahlen sind keine Wortrenner
                              #64,          // @ ist kein Worttrenner
                              #45
                              ];
function F_SearchNextBoundary() : Integer;
var strMySlaw : String
begin
    strMySlaw := 'się na dużą'
    result := 1;
    while strMySlaw(iPos) in INVALID_WORD_SEP_SLA do
    begin
        inc(result);
    end;  
end;


Die oben dargestellte "soll" also die Position des ersten Leerzeichens liefern. Macht sie aber nicht da eine Menge (set of Char) als AnsiChar (ASCII) und nicht als WideChar (UNICODE) interpretiert wird. Der oben dargestellte Allgorithmus würde von links gesehen die Position des Zeichens 'ę' als Grenze ermitteln. Der Blick in die entsprechende UNICODE-Tabelle liefert für das 'ę' folgenden Hex-Wert: H0119. Da das ganze in Mengen auf Ansi zurückgeführt wird nur H19, lt. Ansi Zeichen 25, logischerweise auch ein Worttrenner.

Schlussfolgerung: Wie kann ich WideChar in Mengen nutzen??

Moderiert von user profile iconGausi: Code- durch Delphi-Tags ersetzt
XChris
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Di 20.06.06 11:26 
Mir erschliest sich nicht ganz, was Du überhaupt tun möchtest.

Wäre es nicht einfacher, die Chars in ein String zu stopfen (StringBuilder bei grossen Mengen nutzen!) und dann mit einer RegEx den kram zu untersuchen?

Was ist eigentlich die Aufgabe der Übung?

Chris
Leo1971 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 26

Win 98, Win XP
D5 Ent, D2005 Arch, Prof
BeitragVerfasst: Di 20.06.06 12:08 
Hi,

Sinn der Übung ist es die entsprechenden Wortgrenzen zu ermitteln. Die Funktion dazu sieht etwas anders aus. Die Idee mit dem String ist mir auch schon durch den Kopf gegangen, heißt aber ne ganze Menge umcoden, deshalb die Frage nach den Mengen.

Grüße
Leo
martin_gnoe
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 21.06.06 21:44 
HI

Ich glaube mit System.String (anstatt mit string) als var typ hast du einen String im Unicode, allerdings solltest du´s ausprobieren (bin mir im moment nicht ganz sicher!!!)

hoffe konnte helfen

mfg
Bernhard Geyer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 721
Erhaltene Danke: 3



BeitragVerfasst: Mi 21.06.06 21:47 
Unter D6 geht mehr schlecht als recht da Mengen maximal 255 Elemente beinhalten können. Und wenn man bestimmte Compiler/Linker-schalter für's Debuggen setzt verschluckt sich der Linker an einr solchen Menge.