![]() |
Delphi-Version: 2009
TAnsiStringList - Wie (einfach) ?
... Antworten wie "braucht doch keiner" ö. ä. werden sicher kommen !
Aber: ... ich (und sicher einige mehr) "wollen/müssen" so was "haben/brauchen". Warum ? Ich z.B. hab hier eine (asynchron & kontinuierliche) Datenquelle (DVB-PSI, wem das was sagt...), die mir von kilo- bis megabyte-weise Daten liefern kann, welche immer nur 8-Bit sind. Nicht das Prob, die intern in einem (Ansi)String zu halten/speichern/laden - aber wenn sich (der Einfachheit halber) die Erforderlickeit von Text-Listen ala TStringList ergibt, ist man etwas in's Gesäß gekniffen - weil alles braucht wegen WideChar die doppelte Kapazität. Im Speicher wie auf der Platte ! Hier geht's eher um (etliche) MByte - das juckt vielleicht die HDD nicht, aber das RAM (und die CPU) ! Programm-Intern umstellen auf AnsiString ist da auch nicht so der Bringer ... Z. Zt. behelfe ich mich damit, alle eingehenden Daten (AnsiChar) als WideChar in StringListen zu halten, diese als (ursprüngliche) AnsiChar zu speichern und umgekehrt später wieder zu WideChar zu laden. Das funktioniert zwar so weit tadellos - auf meinem I7-Schläppi mit 16GB RAM (bisher) problemlos ... sollte aber auch aber auch auf 'kleineren Lahm-Kisten' ZEITNAH ohne Speicher-PENG in die Hufe kommen. TStringList zu TAnsiStringList umbauen ? Hab ich mir angesehen und versucht ... und mangels Knoff-Hoff & Zeit aufgegeben. TAnsiStringList als (einfache) TList aus AnsiStrings wäre vielleicht "DIE" Idee ... ... aber wie den AnsiString gezielt (!) für ein "ADD" allokieren und u. a. bei "DELETE" wieder freigeben ... ohne dass es nach x-mal laden/speichern zu (nennswerten) "BummTäTäRä" mangels verfügbarem RAM kommt ??? Mega - Dank im voraus für jede Art von Erleuchtung. |
AW: TAnsiStringList - Wie (einfach) ?
Delphi-Quellcode:
?
type TAnsiStringList = Generics.Collections.TList<RawByteString>
|
AW: TAnsiStringList - Wie (einfach) ?
Wie soll das funktionieren ?
Ein Beispiel zu Typ- und Var-Deklaration in Verbindung mit einer Liste mit "Add" und "Delete" u. a. wäre sehr hilfreich ... |
AW: TAnsiStringList - Wie (einfach) ?
Zitat:
Zitat:
|
AW: TAnsiStringList - Wie (einfach) ?
Zitat:
|
AW: TAnsiStringList - Wie (einfach) ?
@ jaenicke
Zitat:
Zitat:
... habs wie gesagt (erst mal) aufgegeben. Das übersteigt leider meinen Delphi-Internen Horizont. ... da sind offensichtlich noch etliche andere Klassen im Spiel, die nicht mal eben so on the fly to go zu ändern sind :) @ Uwe Zitat:
Ohne mein spezielles "Umdängeln" wird mit widechar auf die Platte geschrieben. Ich verwende hier TFileStream zu speichern und laden, was m.M.n. betreff der String-Typen aber keine Rolle spielen sollte. Mit Block-Read/Write hatte ich vor Jahren schon ähnliche Probs. Ooops - zur Info: Ich verwende hier nicht irgendwelche Speicher-/Lade-Funktionen der TStringList ! Die TSL's sind in meiner App Teile von eigenen Records und müssen aus/in eigenem "Daten-Bestand" eben "händisch" verarbeitet werden. |
AW: TAnsiStringList - Wie (einfach) ?
Wenn eh Records verwendet werden dann definiere doch gleich ein Hauptrecord von dem sich Dein Inhalt abbildet.
Delphi-Quellcode:
Das könnte man so mit kleinen Index-Mengen realisieren.
type
TKrams = record EinInteger: Integer; EinString: String; EinAnsiString: AnsiString; end; var Krams: Array of TKrams; // das zum füllen nutzen KramsDatei: File of TKrams; // das fürs Dateihandling falls Du laden & speichern möchtest mit Read()/Write() Lesen/Schreiben und selber Funktionen schreiben die das Record verwalten. |
AW: TAnsiStringList - Wie (einfach) ?
Zitat:
Zitat:
Delphi-Quellcode:
var
MyAnsiStringList: TAnsiStringList; ... MyAnsiStringList := TAnsiStringList.Create; MyAnsiStringList.Add( 'Hallo'); MyAnsiStringList.Add( 'Welt'); |
AW: TAnsiStringList - Wie (einfach) ?
Kannst du mal ein bisschen Quelltext zur Verwendung deiner bisherigen Lösung zeigen?
Wenn ich mir den Wiki-Artikel so anschaue ( ![]() DeineDaten können hier TBytes (array of Bytes) sein und/oder ein Record, welches automatisch per impliziter/expliziter Methoden die Raw-Daten lesen, umwandeln und wieder ausgeben kann. Wie bekommst du denn die Daten? Eine externe TCP/Http-Quelle? Liest du hier als String? Eine Verwendung direkt als Bytes/Stream wäre vorteilhafter. |
AW: TAnsiStringList - Wie (einfach) ?
Kathinka ist mal wieder fleißig :wink: - SCNR
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz