AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

TAnsiStringList - Wie (einfach) ?

Ein Thema von TERWI · begonnen am 5. Jul 2018 · letzter Beitrag vom 6. Jul 2018
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von TERWI
TERWI

Registriert seit: 29. Mär 2008
Ort: D-49626
378 Beiträge
 
Delphi 11 Alexandria
 
#1

TAnsiStringList - Wie (einfach) ?

  Alt 5. Jul 2018, 21:09
Delphi-Version: 2009
... 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.

Geändert von TERWI ( 5. Jul 2018 um 21:30 Uhr)
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.010 Beiträge
 
Delphi 2009 Professional
 
#2

AW: TAnsiStringList - Wie (einfach) ?

  Alt 5. Jul 2018, 21:26
type TAnsiStringList = Generics.Collections.TList<RawByteString> ?
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Benutzerbild von TERWI
TERWI

Registriert seit: 29. Mär 2008
Ort: D-49626
378 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: TAnsiStringList - Wie (einfach) ?

  Alt 5. Jul 2018, 21:37
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 ...
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.288 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: TAnsiStringList - Wie (einfach) ?

  Alt 5. Jul 2018, 21:51
TStringList zu TAnsiStringList umbauen ?
Hab ich mir angesehen und versucht ... und mangels Knoff-Hoff & Zeit aufgegeben.
Eigentlich ist da nicht viel zu tun... lediglich überall in der Klasse String durch AnsiString ersetzen.

TAnsiStringList als (einfache) TList aus AnsiStrings wäre vielleicht "DIE" Idee ...
Intern nutzen sowohl TStringList als auch TList ein simples Array.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.934 Beiträge
 
Delphi 12 Athens
 
#5

AW: TAnsiStringList - Wie (einfach) ?

  Alt 5. Jul 2018, 21:55
weil alles braucht wegen WideChar die doppelte Kapazität. Im Speicher wie auf der Platte !
Auf Platte in der Regel nicht. Wenn das Standard-Encoding aktiv ist, wird bei SaveToFile auch nur Ansi geschrieben.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von TERWI
TERWI

Registriert seit: 29. Mär 2008
Ort: D-49626
378 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: TAnsiStringList - Wie (einfach) ?

  Alt 5. Jul 2018, 22:41
@ jaenicke
Zitat:
Intern nutzen sowohl TStringList als auch TList ein simples Array.
... eben genau das hatte ich auch im Sinn ...

Zitat:
Eigentlich ist da nicht viel zu tun... lediglich überall in der Klasse String durch AnsiString ersetzen.
... dito - und alles von TStringList aus Classes in eine eigene Unit kopiert und dann dass "anpassen" versucht ...
... 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:
Auf Platte in der Regel nicht. Wenn das Standard-Encoding aktiv ist, wird bei SaveToFile auch nur Ansi geschrieben
... ich hab hier nix betreff "Standard Encoding" geändert/eingestellt. (Wie geht/funktioniert das ?)
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.

Geändert von TERWI ( 5. Jul 2018 um 23:06 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: TAnsiStringList - Wie (einfach) ?

  Alt 5. Jul 2018, 23:33
Wenn eh Records verwendet werden dann definiere doch gleich ein Hauptrecord von dem sich Dein Inhalt abbildet.
Delphi-Quellcode:
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.
Das könnte man so mit kleinen Index-Mengen realisieren.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: TAnsiStringList - Wie (einfach) ?

  Alt 6. Jul 2018, 08:18
Zitat:
type TAnsiStringList = Generics.Collections.TList<RawByteString> ?
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 ...
Mal ausprobiert?
Delphi-Quellcode:
var
  MyAnsiStringList: TAnsiStringList;
...
    MyAnsiStringList := TAnsiStringList.Create;
    MyAnsiStringList.Add( 'Hallo');
    MyAnsiStringList.Add( 'Welt');
Markus Kinzler
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.058 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: TAnsiStringList - Wie (einfach) ?

  Alt 6. Jul 2018, 09:09
Kannst du mal ein bisschen Quelltext zur Verwendung deiner bisherigen Lösung zeigen?
Wenn ich mir den Wiki-Artikel so anschaue (https://de.wikipedia.org/wiki/DVB-SI), würde ich eher ein TDictionary<DeinSchlüssel, DeineDaten> verwenden, welches auch schon in Delphi 2009 vorhanden ist.

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.
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.377 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: TAnsiStringList - Wie (einfach) ?

  Alt 6. Jul 2018, 10:39
Kathinka ist mal wieder fleißig - SCNR
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:16 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