Delphi-PRAXiS

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'

btbe 11. Nov 2004 20:26

Re: Zeichenkette zwischen kommas aus string in array schreib
 
Also erstmal Danke an alle! Hab den Code von MrNiceGuy verwendet und der ist genau das was ich gesucht habe....
Doch es wäre ja auch zu schön....
und zwar will ich jetzt den einen wert den ich aus dem array habe umrechnen (Geschwindigkeit ist in knoten angegeben und soll auf km/h umgerechnet werden). Wenn ich nun aber mit dem wert weiterarbeiten will, bekomm ich die meldung
Zitat:

"Incompatible Types: 'String' and 'Extended'
Wie kann ich den Typ umwandeln so das ich damit rechnen kann (am besten real)??

Nikolas 11. Nov 2004 20:38

Re: Zeichenkette zwischen kommas aus string in array schreib
 
Aus einem Extended machst du per floattostr einen String. Zu deinem Undeclared Identifier:

Du musst dir erst diesen Typ erstellen:
Delphi-Quellcode:
TStringDynArray = array of string;

btbe 11. Nov 2004 21:41

Re: Zeichenkette zwischen kommas aus string in array schreib
 
Frag mich nicht warum aber es funzt nicht, wenn ich die Zeile bei types einfüge, sacht er mir '=' found but ':' expected.... wenn ich das dann ändere kommt auch nix bei rum.... ich bin echt am verzweifeln...

Steve 12. Nov 2004 06:52

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

entweder stehts wohl unter var oder innerhalb einer anderen Typdeklaration {Klassendeklarationen bspw. werden mit end abgeschlossen.)
Schreib Deine Typdefinition mal direkt nach TYPE, dann muss es eigentlich gehn...

Gruß
Stephan :dance:

Stevie 12. Nov 2004 07:24

Re: Zeichenkette zwischen kommas aus string in array schreib
 
Ich weiß zwar nicht, ab welcher Version, aber in der Types.pas ist TStringDynArray schon deklariert. Einfach in die Uses damit.

Coolboarder_9 13. Nov 2004 19:29

Re: Zeichenkette zwischen kommas aus string in array schreib
 
Hallo.

Ich habe ein ähnliches Problem.

Bloß habe ich einen String, der nur aus Zahlen besteht und der durch Kommas getrennt ist. Nun möchte ich die einzelnen Strings als INtegerwerte im Array haben. Wie mache ich das? habs schon versucht aus ner StringList rauszubekommen oder irgendwie aus der zeichenkette von MrNiceGuys algo. Hat aber bis jetz nicht funktioniert. hat jemand eine Idee.
Vielleicht du alcaeus ^^ ?

alcaeus 13. Nov 2004 19:38

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

versuchs mal so:
Delphi-Quellcode:
type IntAr = array of Integer;

procedure StringTeilen(var IntArray: IntAr; str: String);
var
  i: Integer;
  SL: TStringList;
begin
  SL := TStringList.Create;
  try
    SL.Delimiter := ',';
    SL.DelimitedText := str;
    SetLength(IntArray, SL.Count);
    for i := 0 to SL.Count-1 do
    begin
      if not TryStrToInt(SL.Strings[i], IntArray[i]) then
        IntArray[i] := 0;
    end;
  finally
    SL.Free;
  end;
end;
mit TryStrToInt wird versucht, einen String-Wert in einen Integer umzuwandeln. Schlägt dies fehl, dann liefert die Funktion false zurück. In dem Fall wird die Variable sicherheitshalber auf False gesetzt.

Greetz
alcaeus

[edit]Kleinen Fehler im Code verbessert[/edit]

Nikolas 13. Nov 2004 19:57

Re: Zeichenkette zwischen kommas aus string in array schreib
 
Oder auch einfach so:
Delphi-Quellcode:
var
list: tStringlist;
begin
list:= TStringlist.create;
list.commatext:=DeinString;
end;

Coolboarder_9 13. Nov 2004 20:03

Re: Zeichenkette zwischen kommas aus string in array schreib
 
Hallo. Danke schonmal.

Hab nur leider bei der Stelle
SetLength(IntAr, SL.Count);
einen Fehler
incomptaible types wird angezeigt.

Was stimmt da nciht.


UNd was erwartet die Prozedur eigentlich für Parameter beim aufruf?

Danke

alcaeus 13. Nov 2004 20:05

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

hier ein Beispielaufruf:

Delphi-Quellcode:
var
  Zahlen: IntAr; //nicht array of Integer
begin
  StringTeilen(Zahlen, RichEdit1.Text);
  StringTeilen(Zahlen, Memo1.Text);
  StringTeilen(Zahlen, Edit1.Text);
end;
Greetz
alcaeus


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