AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TAnsiStringList - Wie (einfach) ?

Ein Thema von TERWI · begonnen am 5. Jul 2018 · letzter Beitrag vom 6. Jul 2018
Antwort Antwort
Redeemer

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

AW: TAnsiStringList - Wie (einfach) ?

  Alt 5. Jul 2018, 20: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
381 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: TAnsiStringList - Wie (einfach) ?

  Alt 5. Jul 2018, 20: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
10.055 Beiträge
 
Delphi 12 Athens
 
#3

AW: TAnsiStringList - Wie (einfach) ?

  Alt 5. Jul 2018, 20: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
AppCentral
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: TAnsiStringList - Wie (einfach) ?

  Alt 6. Jul 2018, 07: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.079 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: TAnsiStringList - Wie (einfach) ?

  Alt 6. Jul 2018, 08: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.513 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: TAnsiStringList - Wie (einfach) ?

  Alt 6. Jul 2018, 09:39
Kathinka ist mal wieder fleißig - SCNR
  Mit Zitat antworten Zitat
Benutzerbild von TERWI
TERWI

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

AW: TAnsiStringList - Wie (einfach) ?

  Alt 6. Jul 2018, 10:15
Das mit
type TAnsiStringList = Generics.Collections.TList<RawByteString> ?
hab ich immer noch nicht verstanden ...

Die Daten ziehe ich direkt aus dem Transportstrom, zerlege sie dann in (DVB-) System-, Netzwerk-, Service- und EPG(EIT)-Daten.
Hier geht es im besondern um die EIT mit jeweils (reichlich) Text zu "Events" für 'jetzt, später, demnächst' (max. 14 Tage).
Eine komplette 'Sammlung' von ca. 500 Programmen wird da schon recht umfangreich ... Wenn man vorhandenen Teletext dazu auch noch sammelt, wirds noch dicker.

Ein (Short-)Event besteht aus aus 2 Strings mit je max. 256 Zeichen 8-Bit.
Ein (Extended-)Event hate eine Item-Liste aus 2 Strings wie Short. Die Eintäge können sowohl als auch sein - ebenso kann die Liste 0 sein oder auch ellenlang. Deswegen hier (der Einfachheit halber) eine TStringList.
Dazu gibt es noch einen String aus AnsiChar, dessen Länge theoretisch nicht begrenzt ist, prinzipiell aber aus einer Anzahl x-Strings mit max. 256 Zeichen besteht.

Die 3 AnsiStrings mit der TStringList und ner Latte weiterer Daten stecken in einem Record.

Im Moment handle ich das mittels casting so:
Delphi-Quellcode:
...
  // write EE_item-List as ansistring !
  n := EVRec.EE_item.Count;
  EVfsw.Write(n, 2); // write count of EE_item
  for ii := 1 to EVRec.EE_item.Count do // loop items (if any)
  begin
    sansi := ansistring(EVRec.EE_item[i-1]);
    EVfsw.Write(i, 2); // write number of item
    n := Length(sansi);
    EVfsw.Write(n, 2); // write length of EE_item
    if (n > 0) then
    EVfsw.Write(sansi[1], n); // write EE_item
  end;
...
Und wieder zurück:
Delphi-Quellcode:
...
  // read EE_item-List as ansistring !
  inc(sizeread, EVfsr.Read(n, 2)); // read count of EE_item
  for ii := 1 to n do // loop items (if any)
  begin
    inc(sizeread, EVfsr.Read(nn, 2)); // read number of item
    // ... check if nn = ii !
    inc(sizeread, EVfsr.Read(nn, 2)); // read length of EE_item
    SetLength(sansi, nn);
    if (nn > 0) then // read EE_item
    begin
      inc(sizeread, EVfsr.Read(sansi[1], nn));
      EVrec.EE_item.Add(sansi);
    end;
  end;
...
EVfsr und EVfsw sind TFileStreams.
EVRec.EE_item ist die TStringListe.

Geändert von TERWI ( 6. Jul 2018 um 10:17 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

AW: TAnsiStringList - Wie (einfach) ?

  Alt 6. Jul 2018, 10:19
Was gibts da nicht zu verstehen?
Deklarier halt EVRec.EE_item als TList<RawByteString> (oder AnsiString?) und fertig.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von TERWI
TERWI

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

AW: TAnsiStringList - Wie (einfach) ?

  Alt 6. Jul 2018, 10:32
Wenn ich das so mache
TAnsiStringList = TList<RawByteString>; bekomme ich diese Meldung:
Zitat:
[DCC Fehler] DVB_PSI_Data.pas(101): E2003 Undeklarierter Bezeichner: 'TList<>'
  Mit Zitat antworten Zitat
Redeemer

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

AW: TAnsiStringList - Wie (einfach) ?

  Alt 6. Jul 2018, 12:01
Was gibts da nicht zu verstehen?
Deklarier halt EVRec.EE_item als TList<RawByteString> (oder AnsiString?) und fertig.
RawByteString (eigentlich auch nur ein spezieller AnsiString) ist hier denke ich besser, da da garantiert nicht sinnlos herumkonvertiert wird.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Antwort Antwort

 

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 10:53 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