Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi String-Klasse? (https://www.delphipraxis.net/52801-string-klasse.html)

Bigeddie 4. Sep 2005 00:19


String-Klasse?
 
Hallo,

ich suche eine Klasse, mit welcher ich verschiedene Stringtypen bearbeiten kann.

Gruß

bigeddie

Robert_G 4. Sep 2005 01:00

Re: String-Klasse?
 
Gibt's nicht.
Würde dank fehlender Operatorüberladung auch in einem schlimmeren PITA enden als es bereits jetzt der Fall ist. ;)

Manch Hartgesottener würde jetzt einen TStrings-Nachfahren nennen, aber zu krass bin ich nicht... :mrgreen:

Bigeddie 4. Sep 2005 09:20

Re: String-Klasse?
 
Und wie müßte ich den String innerhalb einer von mir erstellten Klasse händeln umtrotzdem Funktionen wie append oder ähnliches richtig und vorallem zeiteffizient implementieren zu können? Als ARRAY OF CHAR oder als delphi-string oder wie?

Olli 4. Sep 2005 09:37

Re: String-Klasse?
 
Zitat:

Zitat von Bigeddie
Und wie müßte ich den String innerhalb einer von mir erstellten Klasse händeln umtrotzdem Funktionen wie append oder ähnliches richtig und vorallem zeiteffizient implementieren zu können? Als ARRAY OF CHAR oder als delphi-string oder wie?

Da der Delphistring Compilerunterstützung genießt und sowohl mit Array of Char als auch mit PChar, Pointer usw. kompatibel ist, würde ich eindeutig diesen empfehlen.

Allerdings, wenn du zwischen Unicode/ANSI konvertieren mußt, wirst du um ein paar Hilfsmethoden nicht herumkommen.

Bigeddie 4. Sep 2005 10:01

Re: String-Klasse?
 
glaubt ihr eine solche Klasse wäre auch was für den Rest der Community an einer solchen Klasse interesse haben könnte?
und wurde mir vielleicht jemand helfen das ganze zu optimieren?

viele Grüße

Bigeddie

jbg 4. Sep 2005 10:40

Re: String-Klasse?
 
Zitat:

Zitat von Bigeddie
ich suche eine Klasse, mit welcher ich verschiedene Stringtypen bearbeiten kann.

Wieviele verschiendene Stringtypen kennst du denn?

Warum sollte man das Rad neu erfinden? Delphi bietet bereits Stringfunktionen. Diese sind zwar nicht in einer Klasse zusammengefasst, aber trotzdem existent.

Olli 4. Sep 2005 10:51

Re: String-Klasse?
 
Zitat:

Zitat von jbg
Wieviele verschiendene Stringtypen kennst du denn?

BSTR, C-String, Delphi-AnsiString, Delphi-WideString, LPWSTR (PWideChar), LPSTR (PChar), Delphi-ShortString, UNICODE_STRING, STRING, ANSI_STRING, OEM_STRING ...

@Bigeddie: Das Problem ist, daß du in Delphi kein Operator-Overloading hast und daher sowas wie die Verbindung zweier Strings mit + nicht einfach ohne Compilerunterstützung implementieren kannst. Stattdessen müßte man mit Hilfsmethoden leben :-\

jbg 4. Sep 2005 10:57

Re: String-Klasse?
 
Zitat:

Zitat von Olli
Zitat:

Zitat von jbg
Wieviele verschiendene Stringtypen kennst du denn?


Zitat:

C-String, Delphi-AnsiString, LPSTR (PChar)
Das ist schonmal nur ein Typ.

Zitat:

BSTR, Delphi-WideString, LPWSTR (PWideChar)
Und das ein weiterer

Zitat:

Delphi-ShortString
Und noch einer.

Zitat:

UNICODE_STRING, STRING, ANSI_STRING, OEM_STRING ...
Toll, dann füg auch noch MYFAVORITE_SELF_CREATED_STRING hinzu.

Und wenn man es genau nimmt, dann gibt es nur einen Typ von String. Alles andere ist reine Interpretation.

tommie-lie 4. Sep 2005 12:06

Re: String-Klasse?
 
Zitat:

Zitat von jbg
Zitat:

C-String, Delphi-AnsiString, LPSTR (PChar)
Das ist schonmal nur ein Typ.

Als ich zuletzt einen String in der Hand hatte, waren Delphi-String noch reference-counted und besaßen ein LongWord, das die Länge angibt. Ich kann mich nicht erinnern, daß das bei LPSTR auch so war. Und wenn Olli mit C-String den Typ String aus der C++-Standardbibliothek meint, ist das wieder was anderes als der Delphi-AnsiString und der LPSTR.

Zitat:

Zitat von jbg
Zitat:

BSTR, Delphi-WideString, LPWSTR (PWideChar)
Und das ein weiterer

Zugegeben, zu BSTR fällt mir im Augenblick nichts ein, aber für den Unterschied zwischen Delphi-WideString und LPWSTR gilt das gleiche wie oben zwischen Delphi-AnsiString und LPSTR.

Aber das mag sich seit gestern alles geändert haben %-)


Zitat:

Zitat von jbg
Und wenn man es genau nimmt, dann gibt es nur einen Typ von String. Alles andere ist reine Interpretation.

ACK. Alles nur eine Aneinanderreihung von Einheiten zu beliebig vielen Bits. Dennoch sind die Zugriffsmethoden mitunter unterschiedlich und deswegen bedürfen sie durchaus einer Konvertierung.

Edit: daß != das...

malo 4. Sep 2005 12:15

Re: String-Klasse?
 
Zitat:

Zitat von jbg
Und wenn man es genau nimmt, dann gibt es nur einen Typ von String. Alles andere ist reine Interpretation.

Wenn man es genau nimmt, dann gibt es keine Strings. Strings werden in Delphi nur durch Compilermagic erstellt. Im Grunde sind das alles nur Char-Arrays ;)

Gandalfus 4. Sep 2005 12:17

Re: String-Klasse?
 
Zitat:

Zitat von Olli
@Bigeddie: Das Problem ist, daß du in Delphi kein Operator-Overloading hast

Das ist kein Problem sondern ein Feature.

Olli 4. Sep 2005 12:40

Re: String-Klasse?
 
Zitat:

Zitat von jbg
Zitat:

C-String, Delphi-AnsiString, LPSTR (PChar)
Das ist schonmal nur ein Typ.

Aua, aufhören. Das tut echt weh!
Vielleicht solltest du dir doch lieber nochmal das Wissen anlesen. C-String und PChar sind gleich, ja - mein Fehler -, aber der Delphi-AnsiString ist ein komplett anderes und compilergestütztes Konstrukt.

+ 2 Stringtypen

Zitat:

Zitat von jbg
Zitat:

BSTR, Delphi-WideString, LPWSTR (PWideChar)
Und das ein weiterer

Ja, ein weiterer Irrtum. BSTR ist genau wie der Delphi-WideString ein "counted string", wobei wie beim Delphi-WideString die Offsets negativ sind. Unterschied ist die interne Struktur die an diesen negativen Offsets liegt. Im Falle von BSTR ist dies nur ein DWORD. Beim Delphi-WideString (und auch AnsiString) sind dies noch mehr Member, Reference Count und Reservierter Speicher, soweit ich mich entsinne. Es handelt sich also tatsächlich um 3 verschiedene Stringtypen.
Übrigens: BSTR != OLESTR. LPOLESTR entspricht LPWSTR!

+ 3 Stringtypen

Zitat:

Zitat von jbg
Zitat:

Delphi-ShortString
Und noch einer.

Richtig, ist auch ein anderer Typ.

+ 1 Stringtyp

Zitat:

Zitat von jbg
Zitat:

UNICODE_STRING, STRING, ANSI_STRING, OEM_STRING ...
Toll, dann füg auch noch MYFAVORITE_SELF_CREATED_STRING hinzu.

Polemik bringt nichts, denn diese Typen wirst du sogar in deinem PSDK finden. Dort ist zB UNICODE_STRING als LSA_UNICODE_STRING deklariert.

+ 1 Stringtyp (weil sich die Pointertypisierung nur unterscheidet bin ich mal großzügig)

= 7 Stringtypen

Wohlgemerkt, dies sind nur jene, die mir auf die Schnelle einfielen. Es könnte noch andere geben.

Zitat:

Zitat von jbg
Und wenn man es genau nimmt, dann gibt es nur einen Typ von String. Alles andere ist reine Interpretation.

Aua.

Zitat:

Zitat von tommie-lie
Und wenn Olli mit C-String den Typ String aus der C++-Standardbibliothek meint, ist das wieder was anderes als der Delphi-AnsiString und der LPSTR.

Nein, ich meinte tatsächlich den der PChar entspricht. War mein Fehler. Ansonsten hätte ich std::string geschrieben. Ist aber eine Klasse genau wie CString aus den MFC oder wxString aus den wxWidgets.

Zitat:

Zitat von tommie-lie
Zugegeben, zu BSTR fällt mir im Augenblick nichts ein

Ist counted.

Zitat:

Zitat von malo
Wenn man es genau nimmt, dann gibt es keine Strings. Strings werden in Delphi nur durch Compilermagic erstellt. Im Grunde sind das alles nur Char-Arrays ;)

Dann darf man es aber nicht zu genau nehmen ;)

Zitat:

Zitat von Gandalfus
Das ist kein Problem sondern ein Feature.

:lol:

tommie-lie 4. Sep 2005 12:57

Re: String-Klasse?
 
Zitat:

Zitat von Olli
Nein, ich meinte tatsächlich den der PChar entspricht. War mein Fehler. Ansonsten hätte ich std::string geschrieben. Ist aber eine Klasse genau wie CString aus den MFC oder wxString aus den wxWidgets.

Jetzt, wo du's sagst... QString existiert auch in dieser C++-Vergewaltigung namens Qt, Dann gäbe es noch den ustring aus Gtk-- (eine Klasse zur Kapselung von Gtk+' String-Funktionen, die auf gchar*-Strings wirken, die wiederum Pointer auf im Framework allokierte Unicode-Characters (ich glaube UTF8, wenn ich mich richtig erinnere, gestern erst habe ich's in der Doku nachgeschlagen und schon wieder vergessen :-( (aber richtig gelesen habe ich, Olli :zwinker:))).

Zitat:

Zitat von Olli
Zitat:

Zitat von Gandalfus
Das ist kein Problem sondern ein Feature.

:lol:

Lass sie doch, sie haben einfach nie Klassen in C++ geschrieben, die Daten kapseln :mrgreen:

Olli 4. Sep 2005 13:02

Re: String-Klasse?
 
Zitat:

Zitat von tommie-lie
)))

Mensch bist du beklemmt. Oder sollte ich sagen: beklammert? :mrgreen:

Zitat:

Zitat von tommie-lie
Lass sie doch, sie haben einfach nie Klassen in C++ geschrieben, die Daten kapseln :mrgreen:

Vielleicht war es auch Ironie. So habe ich es aufgefaßt.

tommie-lie 4. Sep 2005 13:08

Re: String-Klasse?
 
Zitat:

Zitat von Olli
Zitat:

Zitat von tommie-lie
)))

Mensch bist du beklemmt. Oder sollte ich sagen: beklammert? :mrgreen:

behämmert gefällt mir besser :mrgreen: (dabei programmiere ich doch gar nicht in LISP :gruebel:)


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:07 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz