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 mit Trennzeichen in array aufsplitten (https://www.delphipraxis.net/116218-string-mit-trennzeichen-array-aufsplitten.html)

Cyberstorm 25. Jun 2008 09:41


String mit Trennzeichen in array aufsplitten
 
hi.

ich habe den folgenden typen + variable definiert:

Delphi-Quellcode:
TMarketData = Record
  MarketID: Integer;
  MarketName: String;
  MarketType: String;
  MarketStatus: String;
  EventDate: TDateTime;
  MenuPath: String;
  EventHierarchy: String;
  BetDelay: String;
  ExchangeId: Integer;
  ISO3CountryCode: String;
  LastRefresh: TDateTime;
  NumberOfRunners: Integer;
  NumberOfWinners: Integer;
  TotalAmountMatched: Double;
  BSPMarket: Boolean;
  TurningInPlay: Boolean;
end;

Market: Array of TMarketData;
ich habe nun einen ca. 500kb großen string im folgenden format:
Delphi-Quellcode:
97383~Next Man Utd Manager~O~ACTIVE~1000731600000~\Soccer\Specials~/1/97381/97383~0~1~GBR~1214381583371~40~1~106887.3~N~N:4575285~Outright Winner~O~ACTIVE~1212854400000~\Soccer\Euro 2008~/1/4574657/4575285~0~1~CHE~1214381583371~4~1~1.249529301E7~N~N:20089116~Match Odds~O~SUSPENDED~1160143200000~\Soccer\U19 Euro Championship\Fixtures 06 October\FYR Macedo U19 v Rep Ire U19~/1/232548/10291447/10291446/20089116~0~1~GBR~1214381583371~3~1~0.0~N~N:20692870~Winner 2010~O~ACTIVE~1149858000000~\Soccer\World Cup~/1/785071/20692870~0~1~DEU~1214381583371~34~1~16839.7~N~N:20745001~To Reach The Final~O~ACTIVE~1138448359000~\Soccer\Euro 2008~/1/4574657/20745001~0~1~CHE~1214381583371~4~2~468719.12~N~N:[...] usw.
diesen will ich in das array bekommen.

":" ist das trennzeichen für einen neuen markt --> neuer TMarketData und "~" ist das trennzeichen für das nächste feld.
die reihenfolge stimmt überein.

wie krieg ich das ganze nun möglichst schnell und elegant in den array?
das zweite problem ist, dass immer wenn ein ":" KEIN trennzeichen ist, sondern z.B. eine Uhrzeit etc. ein blackslash vorran gestellt ist "\:" das müsste man halt auch berücksichtigen :-/.


falls jemand einen guten ansatz hat wäre ich sehr dankbar!

grüße aus berlin
konrad

mkinzler 25. Jun 2008 09:51

Re: String mit Trennzeichen in array aufsplitten
 
Ich würde 2 Stringlisten (.Delimiter .DelimitedText)verwenden. Die äußere für die Datensätze und die innere für die Felder.

Cyberstorm 25. Jun 2008 09:56

Re: String mit Trennzeichen in array aufsplitten
 
hi.
könntest du da grob die vorgehensweise beschreiben?

danke!

mkinzler 25. Jun 2008 10:02

Re: String mit Trennzeichen in array aufsplitten
 
Delphi-Quellcode:
var
    slds, slf: TStrings;
    i, j: Integer;
    ...
    slds := TStringList.Create;
    slds.Delimiter := ':';
    slf := TStringList.Create;
    slf.Delimiter := '~';
    slds.DelimitedText := <string>;
    for i := 0 to slds.Count -1 do
    begin
        //Neuer DS
        ...
        slf.DelimitedText := slds[i];
        //Felder
        // slf[0] ist erstes Feld
        ...
    end;
getippt und nicht getestet

Cyberstorm 25. Jun 2008 10:09

Re: String mit Trennzeichen in array aufsplitten
 
also in dem array wär es schon besser als in zwei stringlisten, weil ich noch recht häufig im laufe des codes auf die sachen zugreife und dann immer alles umwandeln müsste.
speicherplatztechnisch ist das ja auch nicht das tollste nur strings zu nehmen.

außerdem besteht weiterhin das problem mit "\:" und im nachhinein die richtigen einträge wiederzufinden wird mit der variante auch ein spass...


aber danke trotzdem für die idee!! kannte ich auch noch nicht :-)

mkinzler 25. Jun 2008 10:16

Re: String mit Trennzeichen in array aufsplitten
 
Es ging ja um das Auslesen, du kannst in der Schleife de Werte ja in den Array bzw Record schreiben.

Cyberstorm 25. Jun 2008 13:00

Re: String mit Trennzeichen in array aufsplitten
 
stimmt, ging ganz gut!

musste nur "StrictDelimiter:=True" setzen, damit er keine leerzeichen trennt.

danke nochmal


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:31 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