Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Delphi und flexible Arrays (https://www.delphipraxis.net/7388-delphi-und-flexible-arrays.html)

magix 11. Aug 2003 10:26


Delphi und flexible Arrays
 
Erst einmal Hallo,

ich weiss der Titel ist nicht der Beste, aber mir faellt auch das formulieren der Frage schwer. Am besten ist es wohl wenn ich beschreibe was ich vor habe.

Ich frage einen Spieleserver via UDP ab, dieser schickt mir einen String zurueck der wie folgt aussieht

Code:
protocol\46\players\0\proxytarget\0\lan\0\max\15\...
Das Problem ist jetzt das ich den String nicht einfach auseinandernehmen kann (ich verwende eine split() Funktion hier aus dem Forum) und ein
array generieren kann, da sich die Position der Elemente aendern kann.

Aber wie man sehen kann hat der String eine Schluessel/Wert Struktur

protocol : 46
players : 0
usw.

Unter PHP wuerde ich den Schluessel jetzt als Arrayindex definieren und in der weiteren Verwendung auf diesen zugreifen.

echo $server['protocol']; // 46

Kann ich sowas auch in Delphi/Pascal verwirklichen? Wenn ja, wie ? :D

RTFM Pointer und aehnliches sehr willkommen. :lol:

Ich hoffe ich konnte mich einigermassen Verstaendlich ausdruecken.

Achja hab es ja fast vergessen: Delphi 7 verwende ich.

MfG
Mr. Magix

jbg 11. Aug 2003 10:58

Re: Delphi und flexible Arrays
 
Probiers mal mit [Gemütlichkeit, mit Ruhe und Gelassenheit...]
Delphi-Quellcode:
procedure TextArrayToAssStringList(const Text: string; Delimiter: Char; List: TStrings);
var
  F, P: PChar;
  Name, Value: string;
begin
  P := PChar(Text);
  while P[0] <> #0 do
  begin
    F := P;
    while (P[0] <> #0) and (P[0] <> Delimiter) do Inc(P);
    SetString(Name, F, P - F);
    if P[0] <> #0 then
    begin
      Inc(P);
      F := P;
      while (P[0] <> #0) and (P[0] <> Delimiter) do Inc(P);
      SetString(Value, F, P - F);
    end
    else
      Value := '';

    List.Add(Name + '=' + Value);
  end;
end;

...
var List: TStrings;
begin
  List := TStringList.Create;
  try
    TextArrayToAssStringList('myname\myvalue\yourname\yourvalue', List, '\');
    if List.Values['myname'] = 'myvalue' then
      ShowMessage('Gefunden');
  finally
    List.Free;
  end;
end;

magix 11. Aug 2003 11:24

Re: Delphi und flexible Arrays
 
Super, es macht es genauso wie ich mir das vorgestellt habe. Vielen Dank.

Achja nur so fuer die Akten im unteren Teil ist ein Parameter-dreher!
Erst der Delimiter und dann die Liste.

So und in 3 Wochen verstehe ich auch warum es geht :D

*Befehlsreferenz zueck...*

MfG
Magix

jbg 11. Aug 2003 11:56

Re: Delphi und flexible Arrays
 
Zitat:

Zitat von magix
Achja nur so fuer die Akten im unteren Teil ist ein Parameter-dreher!
Erst der Delimiter und dann die Liste.

Wiedermal meine Copy&Paste Sperre. :lol:
Der wahre Grund lag daran, dass die der Delimiter Parameter ganz zu Anfang der letzte war und ich ihn dann aus logischen Gründen nach vorne verschoben habe.

Zitat:

So und in 3 Wochen verstehe ich auch warum es geht :D
Und wenn nicht, macht es auch nichts. Das kann man auch mit Pos, Copy und Delete machen (nur eben langsamer). Diese Art der Programmierung mit PChars habe ich selbst vom Programmierer der früheren RaLib abgekupfert und perfektioniert. Das ist aber schon sehr lange her. :wink:


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