Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Zeichenkette zwischen kommas aus string in array schreiben (https://www.delphipraxis.net/33716-zeichenkette-zwischen-kommas-aus-string-array-schreiben.html)

btbe 11. Nov 2004 16:03


Zeichenkette zwischen kommas aus string in array schreiben
 
Versuche es jetzt nochmal in einem neuen Thread

Also ich habe einen string:
Zitat:

$GPGGA,155805.998,5004.8801,N,00835.7431,E,1,03,03 .7,00100.9,M,47.5,M,,*6E
so nun brauche ich die werte zwischen den kommas in ein array geschrieben z.B.:

GPGGA[1] -> 155805.998
GPGGA[2] -> 5004.8801
GPGGA[3] -> N
GPGGA[4] -> 00835.7431
GPGGA[5] -> E
GPGGA[6] -> 1
GPGGA[7] -> 03
GPGGA[8] -> 03.7
GPGGA[9] -> 00100.9
GPGGA[10] -> M
GPGGA[11] -> 47.5
GPGGA[12] -> M
GPGGA[13] ->

Ich bekomms einfach nicht auf die Reihe, das kann doch nicht so kompliziert sein.... bin für jede Hilfe dankbar!!!

mfg
btbe

Luckie 11. Nov 2004 16:06

Re: Zeichenkette zwischen kommas aus string in array schreib
 
Guck mal in der CodeLib nach explodeexplode:

btbe 11. Nov 2004 16:09

Re: Zeichenkette zwischen kommas aus string in array schreib
 
hatte ich schon aber wie bau ich die genau ein? bin absoluter noob!

alcaeus 11. Nov 2004 16:09

Re: Zeichenkette zwischen kommas aus string in array schreib
 
Je nach Delphi-Version kannst du auch die Eigenschaft Hier im Forum suchenDelimitedText der Delphi-Referenz durchsuchenTStringList ausnutzen. Die Eigenschaft gibts AFAIK aber erst ab Delphi 6.

Greetz
alcaeus

Ultimator 11. Nov 2004 16:14

Re: Zeichenkette zwischen kommas aus string in array schreib
 
Du hast folgende Prozedur:
Delphi-Quellcode:
function Explode(const Separator, S: string; Limit: Integer = 0): TStringDynArray;
Sie erwartet 3 Parameter: Den Separator, den Ursprungsstring und das Limit.

Wie gesagt:
Zitat:

Wenn Limit > 0 ist, so werden max. Limit Elemente getrennt, wobei im letzen Element die Restzeichenkette steht.
Also ist für Limit in deinem Fall 0 zu setzen.
Die einzelnen Werte sind in deinem Fall ja durch Kommata separiert, also ist der Separator , :zwinker:

So, jetzt müsste das klarer sein ;-)

btbe 11. Nov 2004 16:16

Re: Zeichenkette zwischen kommas aus string in array schreib
 
wie kann ich dann die TStringList (bzw. einzelne einträge) auslesen? wird auch wenn zwischen den kommas nichts steht ein platzhalter reingeschrieben, den die werte des strings ändern sich und ich muss auf bestimmte positionen im string zugreifen können (auch da wo zw. den kommas nichts steht, kann bei der nächsten abfrage etwas stehen! Ich benutze delphi6

Nikolas 11. Nov 2004 16:20

Re: Zeichenkette zwischen kommas aus string in array schreib
 
Die stringlist ist so was wie ein array of String, also auslesen geht dann so;

Delphi-Quellcode:
astring:= astringlist[0];

alcaeus 11. Nov 2004 16:20

Re: Zeichenkette zwischen kommas aus string in array schreib
 
Hi btbe,

hier ein kleines Beispiel zur Verwendung der StringList:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
  SL: TStringList;
begin
  SL := TStringList.Create;
  try
    SL.Delimiter := ',';
    SL.DelimitedText := '155805.998,5004.8801,N,00835.7431,E,1,03,03.7,00100.9,M,47.5,M,,*6E';
    for i := 0 to SL.Count-1 do
      ShowMessage(SL.Strings[i]);
  finally
    SL.Free;
  end;
end;
In der Schleife werden die Elemente eines nach dem anderen ausgelesen und angezeigt, du könntest sie aber auch in ein Array schreiben. Besser wäre vielleicht sogar, die StringList statt dem Array zu verwenden, dann sparst du dir das ewige rumkopieren.

Greetz
alcaeus

MisterNiceGuy 11. Nov 2004 16:23

Re: Zeichenkette zwischen kommas aus string in array schreib
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi, Programm ist im Anhang (inc. QT) leider funzt das letze Segment nicht. Weiß nicht woran das liegt. Vielleicht am Sternchen??

MfG

btbe 11. Nov 2004 16:40

Re: Zeichenkette zwischen kommas aus string in array schreib
 
Delphi-Quellcode:
...

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    ComPort: TApdComPort;
    Label1: TLabel;
    Button1: TButton;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Timer1: TTimer;
    function Explode(const Separator, S: string; Limit: Integer = 0): TStringDynArray;
    procedure ComPortTriggerAvail(CP: TObject; Count: Word);
    procedure Timer1Timer(Sender: TObject);

...

implementation

{$R *.dfm}


function Explode(const Separator, S: string; Limit: Integer = 0): TStringDynArray;
var
  SepLen: Integer;
  F, P: PChar;
  ALen, Index: Integer;
begin
  SetLength(Result, 0);
  if (S = '') or (Limit < 0) then Exit;
  if Separator = '' then
  begin
    SetLength(Result, 1);
    Result[0] := S;
    Exit;
  end;
  SepLen := Length(Separator);
  ALen := Limit;
  SetLength(Result, ALen);

  Index := 0;
  P := PChar(S);
  while P^ <> #0 do
  begin
    F := P;
    P := AnsiStrPos(P, PChar(Separator));
    if (P = nil) or ((Limit > 0) and (Index = Limit - 1)) then P := StrEnd(F);
    if Index >= ALen then
    begin
      Inc(ALen, 5);
      SetLength(Result, ALen);
    end;
    SetString(Result[Index], F, P - F);
    Inc(Index);
    if P^ <> #0 then Inc(P, SepLen);
  end;
  if Index < ALen then SetLength(Result, Index);
end;
...
was hab ich hier falsch gemacht? bekomme diese meldung
Zitat:

[Error] Unit1.pas(19): Undeclared identifier: 'TStringDynArray'


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:17 Uhr.
Seite 1 von 2  1 2      

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