Zeichenzahl eines widestrings feststellen

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Benutzeravatar
theo
Beiträge: 10952
Registriert: Mo 11. Sep 2006, 19:01

Re: Zeichenzahl eines widestrings feststellen

Beitrag von theo »

creed steiger hat geschrieben: Hexadezimal.(zumindestens war das zu C64 Assemblerzeiten noch so).
Das hatten wir schon http://www.lazarusforum.de/viewtopic.php?p=23420#p23420" onclick="window.open(this.href);return false;
Damit kann der guennid aber wahrscheinlich nichts anfangen, bzw. es interessiert ihn nicht.

creed steiger
Beiträge: 958
Registriert: Mo 11. Sep 2006, 22:56

Re: Zeichenzahl eines widestrings feststellen

Beitrag von creed steiger »

theo hat geschrieben:
Das hatten wir schon http://www.lazarusforum.de/viewtopic.php?p=23420#p23420" onclick="window.open(this.href);return false;
Damit kann der guennid aber wahrscheinlich nichts anfangen, bzw. es interessiert ihn nicht.
Ohweh, das ich seh' ich jetzt erst.
Die Sache zieht sich ja schon länger.

guennid
Beiträge: 59
Registriert: Sa 9. Aug 2008, 10:19

Re: Zeichenzahl eines widestrings feststellen

Beitrag von guennid »

Lerne doch mal ein paar Wochen oder Monate Pascal- ... Grundlagen
theo, meinst du wirklich, dass das mich witerbringt? Ich betreibe pascal seit 15 Jahren, allerdings immer nur DOS-Pascal. Wenn ich in dieser Zeit die Grundlagen nicht gelernt habe, werde ich sie in einigen Wochen/Monaten wohl auch nicht mehr lernen. Ich kann mit Arrays, Records, Zeigern bis hin zu doppelt verketteten Listen umgehen.
Ich habe in diesen 15 Jahren ein - in meinen Augen (ich habe keine Vergleichspunkte, ich bin ein Einzelgänger) - ziemlich komplexe, auf dbase-files basierende Büchereiverwaltung geschrieben, die zu meiner und meiner Schüler vollen Zufriedenheit läuft und bei der ich auch bleiben würde, wenn da nicht diese DOS/dBase-Sackgasse wäre.
Ich glaube, all das habe ich schon erwähnt, als ich anfing in diesem Forum.


Mir ist bisher noch kein einziger sachlich unwiderleglicher Grund bekannt geworden, warum ich für meine Zwecke die prozedurale Programmierung (bei der ich mir halt schon einigermaßen sicher bin) aufgeben muss. Es läuft doch immer hinaus auf arbeitserleichternde und ästhetische Aspekte, die ich ja auch allgemein durchaus anerkenne, aber halt nicht für mich mit meiner Vorgeschichte. Wenn wir an diesen Punkt kommen, wenn sich zeigt, dass es mit reinem Pascal nicht geht, bin ich gerne bereit, entweder aufzugeben oder (weniger wahrschenlich, dazu bin ich denn doch zu alt) neu bei Null anzufangen.
Einiges in den von theo genannten links hebe ich mir zwischenzeitlich angesehen (es ist halt nicht so, dass ich hier seit fünf Wochen däumchendrehend darauf warte, dass mir jemand fertige Lösungen präsentiert), insbesondere [1], Kap 3 und 7, aber ich muss gestehen, bei meinen konkreten Problemen (die neuen, in DOS-Pascal nicht vorhandenen STRING-Typen) bin ich da nicht wirklich schlauer geworden.

Nun lasst euch doch mal ein auf meine Marotte, dieses Konsolenprogramm für linux/mysql weiterentwickeln zu wollen, auch wenn ihr es für umständlich und/oder antiquiert haltet. Ich denke, damit werde ich Mühen genug haben, aber Mühen scheue ich nicht (wie mir hier mitunter unterstellt wurde).

So und nun zum Abschluss des langen Sermons noch mal 'ne ganz konkrete Frage: Wenn zutrifft, was theo sagt:
Eine WideString Konstante kann man auch nicht wirklich in einem UTF-8 Editor als Text definieren
Wäre ich dann gut beraten, gleich UTF8STRING zu verwenden?

Grüße, Günther

[1] http://www.marcocantu.com/epascal/German/default.htm" onclick="window.open(this.href);return false;

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Zeichenzahl eines widestrings feststellen

Beitrag von Christian »

Ich bin eigentlich nebenbei immer im IRC Chat erreichbar, vllt ists ganz gut wenn man ein paar probeme mal dort inner halben Stunde (hoffentlich) klärt statt über ellenlange Threads wo mehrere Leute mit anderen Ansatzpunkten kommen. Nur n Angebot.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
theo
Beiträge: 10952
Registriert: Mo 11. Sep 2006, 19:01

Re: Zeichenzahl eines widestrings feststellen

Beitrag von theo »

Wie alt bist du denn? (Wenn man fragen darf)
Ich habe auch mit Turbo Pascal angefangen und bin dann auf Delphi / Lazarus umgestiegen.
Ich würde das empfehlen.
Auch ist dieses Forum nicht spezialisiert auf deine Art von Programmierung. Lazarus bedeutet GUI Programmierung und dann willst du auch noch ohne OOP arbeiten. Ich glaube das kann hier gar keiner mehr ;-)
Vielleicht wäre dir mit deinem Ansatz bei einer reinen Freepascal Mailing List besser geholfen: http://www.mail-archive.com/fpc-pascal% ... ascal.org/" onclick="window.open(this.href);return false;
guennid hat geschrieben: Wäre ich dann gut beraten, gleich UTF8STRING zu verwenden?
Wenn du damit arbeiten kannst: Ja.

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Zeichenzahl eines widestrings feststellen

Beitrag von Socke »

theo hat geschrieben:
guennid hat geschrieben:Wäre ich dann gut beraten, gleich UTF8STRING zu verwenden?
Wenn du damit arbeiten kannst: Ja.
mal ne Frage von mir: gibts irgendwo eine Dokumentation/Beschreibung/Einführung zu dem Typen UTF8String und den dazugehörenden Funktionen? In den FPC-Dokumenten habe ich nur die Funktionsheader gefunden (und die Absichten des Quelltextes zu verstehen ist, denke ich, ein bisschen zuviel verlangt, wenn man nur mit Unicode-Strings arbeiten möchte).

MfG Socke
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Targion
Beiträge: 688
Registriert: Mi 3. Okt 2007, 21:00
OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
CPU-Target: x86_64

Re: Zeichenzahl eines widestrings feststellen

Beitrag von Targion »

theo hat geschrieben:[...]Auch ist dieses Forum nicht spezialisiert auf deine Art von Programmierung. Lazarus bedeutet GUI Programmierung und dann willst du auch noch ohne OOP arbeiten. Ich glaube das kann hier gar keiner mehr ;-)
@guennid
Konsolenanwendungen sind kein Problem, aber warum versuchst du nicht, ein paar OOP-Grundlagen zu erlernen? Das ist wirklich kein großes Problem. Damit könntest du dann das Büchereiprogramm erweitern und später, wenn du dir das zutraust, auch eine GUI erstellen. Dann wäre deine Anwendung auch benutzerfreundlicher. (Naja, zumindest für den heutigen Benutzer ;-)) Die passenden Links wurden glaube ich schon genannt und die OOP-Grundlagen sind wirklich nicht viel. Versuch's doch mal!

Benutzeravatar
theo
Beiträge: 10952
Registriert: Mo 11. Sep 2006, 19:01

Re: Zeichenzahl eines widestrings feststellen

Beitrag von theo »

Socke hat geschrieben: mal ne Frage von mir: gibts irgendwo eine Dokumentation/Beschreibung/Einführung zu dem Typen UTF8String und den dazugehörenden Funktionen? In den FPC-Dokumenten habe ich nur die Funktionsheader gefunden (und die Absichten des Quelltextes zu verstehen ist, denke ich, ein bisschen zuviel verlangt, wenn man nur mit Unicode-Strings arbeiten möchte).
FPC spezifische Dokumentation dazu ist mir nicht bekannt.
Ein UTF8String ist für den Compiler das gleiche wie ein Ansistring ( UTF8String = type ansistring; )
Der Haken an UTF8 gegenüber ANSI ist, dass dabei ein Byte (Char) nicht einem Buchstaben entsprechen muss, aber kann!
D.h. alle Zeichen < 127 belegen ein Byte, alle drüber zwei oder mehrere.
Deshalb kann man nicht mehr durch den String rattern mit "MyString" weil man nicht weiss, ob an der Position ein Buchstabe oder nur ein Teil eines Buchstabens steht. Drum sind UTF8Strings mit Length() geprüft auch länger als was wir an Buchstaben sehen, sofern sie z.B. Umlaute beinhalten. Deshalb muss man z.B. mit UTF8Length(); die eigentliche Anzahl Buchstaben bestimmen.
Und so weiter... ;-)

guennid
Beiträge: 59
Registriert: Sa 9. Aug 2008, 10:19

Re: Zeichenzahl eines widestrings feststellen

Beitrag von guennid »

Christian habe ich 'ne PN geschrieben, nur so zur Kenntnis, nicht dass ich wieder um die Ohren gehauen kriege, ich ginge auf nichts ein.
targion hat geschrieben:warum versuchst du nicht, ein paar OOP-Grundlagen zu erlernen?
Meine Prioritätenliste sieht so aus:
1. Ich muss aus der DOS-Ecke raus --> freepascal
2. ich muss mysql lernen und mit pascal verheiraten

Das sind die essentials und soweit ich das überblicke, wird das alles andere als einfach. Wenn das einigermaßen gelungen ist, könnte man mal an oop denken -- denke ich.

@theo
Wie alt bist du denn? (Wenn man fragen darf)
Man darf, aber das möchte ich nicht so gern veröffentlichen, weil das dann doch einige vom Stuhl hauen würde :mrgreen:
theo hat geschrieben:Vielleicht wäre dir mit deinem Ansatz bei einer reinen Freepascal Mailing List besser geholfen
Ich kann nicht besonders gut Englisch. :oops: Auf Deutsch ist mir das wesentlich angenehmer.
theo hat geschrieben:Ein UTF8String ist für den Compiler das gleiche wie ein Ansistring ( UTF8String = type ansistring; )
Der Haken an UTF8 gegenüber ANSI ist, dass dabei ein Byte (Char) nicht einem Buchstaben entsprechen muss, aber kann!
D.h. alle Zeichen < 127 belegen ein Byte, alle drüber zwei oder mehrere.
Deshalb kann man nicht mehr durch den String rattern mit "MyString" weil man nicht weiss, ob an der Position ein Buchstabe oder nur ein Teil eines Buchstabens steht. Drum sind UTF8Strings mit Length() geprüft auch länger als was wir an Buchstaben sehen, sofern sie z.B. Umlaute beinhalten. Deshalb muss man z.B. mit UTF8Length(); die eigentliche Anzahl Buchstaben bestimme


Du weißt doch 'ne ganze Menge, mach doch einfach mal in dem Stil weiter. Soweit bin ich mittlerweile nicht zuletzt dank deiner Hilfe beim widestring auch schon, und habe auch schon ein paar kleine Routinen entsprechend umgeschrieben und getestet.

Kennst du übrigens das schon: mit writln(ord('Ä')) kriegst du die pascal-Ordnungsnummer des jeweiligen Zeichens heraus, die du dann z.B mit #196 wieder in die utf8/widestrings einbauen kannst. (Ich denke, das umgeht wenigstens teilweise die Notwendigkeit der hexadzimalen Schreibweise). Auch case funktioniert mit dieser Schreibweise in freepascal im word-Bereich (meine Fensterecken liegen bei über #9000).

So, aber jetzt will ich mich erst mal an utf8string versuchen.

Grüße, Günther

Grüße, Günther

Benutzeravatar
theo
Beiträge: 10952
Registriert: Mo 11. Sep 2006, 19:01

Re: Zeichenzahl eines widestrings feststellen

Beitrag von theo »

guennid hat geschrieben: Kennst du übrigens das schon: mit writln(ord('Ä')) kriegst du die pascal-Ordnungsnummer des jeweiligen Zeichens heraus
Das geht in einer UTF-8 IDE nicht. Ein 'ä' ist da bereits ein String während ein 'a' noch ein Char ist.
Das folgende geht in einer UTF-8 IDE, dann kriegst du als Resultat den WideChar als Word:
writeln(Ord(UTF8Decode('я')[1]));

guennid
Beiträge: 59
Registriert: Sa 9. Aug 2008, 10:19

Re: Zeichenzahl eines widestrings feststellen

Beitrag von guennid »

Stimmt schon wieder :oops:
Ich hatte vergessen zu erwähnen, dass ich so vorgegangen war:
mychar := UTF8Decode('╔')[1];
dann ergibt
writeln(Ord(mychar)) tatsächlich korrekt 9556.
Was aber dann letztlich auf deine Syntax hinausläuft. :wink:

Und um das in einen widestring einzubauen, musste ich auch anders als erwähnt vorgehen:
mystr := 'merkwürden'+UTF8Encode(#9556); sonst funktioniert's nicht mit der Pascal-Ordnungsnummer.
Du hast weiterhin recht, dass das ein ziemiches Gewürge ist.

Ich sollte diese widestrings/-char Codierung bei mir wohl besser nicht weiter verfolgen - oder die Arbeitsumgebung auf iso8859 umstellen. Ich denke, letzteres wäre weniger sinnvoll.

Grüße, Günther

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Zeichenzahl eines widestrings feststellen

Beitrag von mse »

theo hat geschrieben:
Das ist Quatsch:

var meinstr : WIDESTRING;
meinstr := 'deine Wünsche können erfüllt werden'

Hier schiebst du einen UTF8String (bei einer UTF8 IDE) in einen WideString. Was soll das sein?
Dies ist seltsam, FPC sollte utf-8 string Literale korrekt in widestring Konstanten umwandeln, wenn mit -Fcutf8 gestartet. Auf jeden Fall funktioniert es mit MSEide+MSEgui, welches widestring statt UTF8String verwendet, perfekt.

Übrigens wurde soeben MSEide+MSEgui Version 2.0beta1 freigegeben:
http://sourceforge.net/project/showfile ... _id=165409

Bitte beachten: zur Arbeit mit MSEide+MSEgui muss mseide_msegui_src_2_0beta1.zip ebenfalls installiert werden, näheres siehe README.TXT.

Martin

Benutzeravatar
theo
Beiträge: 10952
Registriert: Mo 11. Sep 2006, 19:01

Re: Zeichenzahl eines widestrings feststellen

Beitrag von theo »

mse hat geschrieben:wenn mit -Fcutf8 gestartet.
Ja, dann scheinbar schon (wusste ich nicht), aber mit normalen Einstellungen nicht.
Das ist zwar ganz praktisch, macht die Angelegenheit aber nicht unbedingt klarer.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Zeichenzahl eines widestrings feststellen

Beitrag von mse »

theo hat geschrieben: Das ist zwar ganz praktisch, macht die Angelegenheit aber nicht unbedingt klarer.
Falls Lazarus den Quelltext in utf-8 abspeichert und utf-8 nicht die Codierung des Betriebssystem ist, muss dies FPC mitgeteilt werden, ansonsten FPC ISO8859-1 annimmt. Ich habe zwar mal gelesen, dass FPC den BOM zur utf-8 Erkennung verwendet. Möglicherweise schreibt Lazarus (vernünftigerweise) kein BOM-Byte an den Dateibegin.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Zeichenzahl eines widestrings feststellen

Beitrag von Christian »

Das funktioniert auf jeden fall.
Ich hab etliches an unicodestrings im Code stehen und die werden auch zur laufzeit richtig angezeigt/verarbeitet.
kA wie das gelöst st auf jedenfall ists kein problem.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Antworten