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/)
-   -   extended to string (https://www.delphipraxis.net/33742-extended-string.html)

btbe 11. Nov 2004 22:35


extended to string
 
Hab im ganzen forum gesucht aber nichts gefunden was funktioniert
Muss einen wert des in nem array steht umrechen wenn ich irgendetwas versuche bekomm ich
Zitat:

Incompatible types: 'Extended' and 'String'
ausgespuckt....


Hier mein quellcode:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, OoMisc, AdPort, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    ComPort: TApdComPort;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Timer1: TTimer;
    Label13: TLabel;
    Edit1: TEdit;
    Button1: TButton;
    Label14: TLabel;
    Label15: TLabel;
    Label16: TLabel;
    Label17: TLabel;
    Label18: TLabel;
    Label19: TLabel;
    Label20: TLabel;
    Label21: TLabel;
    Label22: TLabel;
    Procedure Ordne(Zeichenkette:String);
    procedure ComPortTriggerAvail(CP: TObject; Count: Word);
    procedure Timer1Timer(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
  GPGGA:Array[1..25] Of String;
    { Public declarations }
  end;

var
  Form1: TForm1;
  z: string;
  x, y: Integer;
  Data: String;
  I: Integer;
  Ergebnis1: TStringlist;
  ggaline: String[200];
  gsaline: String[200];
  rmcline: String[200];
  speed: string;
implementation

{$R *.dfm}


Procedure TForm1.Ordne(Zeichenkette:String);
  var i,j:integer;
      ZS : String;
      array_seen : boolean;
begin
  ZS :='';
  array_seen := false;
  j:=1;
  for i:=1 to length(Zeichenkette) do
    begin
      if array_seen then
        if zeichenkette[i] =',' then
          begin
            if ZS <> '' then
            GPGGA[j] := ZS;
            j:=j+1;
            ZS := '';
          end
        else
          zs := zs+zeichenkette[i]
       else
         if zeichenkette[i] =',' then array_seen := true;
     end;
end;


procedure TForm1.ComPortTriggerAvail(CP: TObject; Count: Word);
begin
  { OnTriggerAvail; Read the data }
 for I:= 0 to Count -1 do
  begin
    Data := ComPort.GetChar;
   z := z + Data;
 if Data = #10 then
  begin

   Ergebnis1 := TStringlist.Create;
   if pos('GPGGA',z) > 0 then
    ggaline := z;
   if pos('GPGSA',z) > 0 then
    gsaline := z;
   if pos('GPRMC',z) > 0 then
    rmcline := z;
   z := '';
  end;
 end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
type
   TStringDynArray = array of string;

begin
ordne(ggaline);
Label1.Caption := GPGGA[1];
Label2.Caption := GPGGA[2] + GPGGA[3];
Label3.Caption := GPGGA[4] + GPGGA[5];
Label4.Caption := GPGGA[6];
Label5.Caption := GPGGA[7];
Label6.Caption := GPGGA[11] + GPGGA[12];
ordne(gsaline);
Label15.Caption := GPGGA[2];
ordne(rmcline);
Label16.Caption := GPGGA[2];
Label17.Caption := GPGGA[7];
Label18.Caption := GPGGA[9];

end;


procedure TForm1.Button1Click(Sender: TObject);
begin
ComPort.ComNumber := strtoint(Edit1.Text);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
speed := '0';
end;

end.
hoffe mir kann jemand helfen!

thnx btbe

Union 11. Nov 2004 22:38

Re: extended to string
 
Und wo bitte tritt der Fehler auf? Versuchst Du dort über Modem GPS Daten einzulesen...

btbe 11. Nov 2004 22:44

Re: extended to string
 
Oh sorry, so tritt kein fehler auf, aber wenn ich halt umrechen will:

Delphi-Quellcode:
ordne(rmcline);
Label16.Caption := GPGGA[2];
Label17.Caption := round(GPGGA[7] * 1,852);
Label18.Caption := GPGGA[9];
hab alles mögliche probiert (floatostr(), floattoint(), strtofloat(), floattostf(),....)
bin verzweifelt

Dani 11. Nov 2004 22:47

Re: extended to string
 
Zitat:

Zitat von btbe
Oh sorry, so tritt kein fehler auf, aber wenn ich halt umrechen will:

Delphi-Quellcode:
ordne(rmcline);
Label16.Caption := GPGGA[2];
Label17.Caption := round(GPGGA[7] * 1,852);
Label18.Caption := GPGGA[9];
hab alles mögliche probiert (floatostr(), floattoint(), strtofloat(), floattostf(),....)
bin verzweifelt

Hi!

Delphi-Quellcode:
Label17.Caption := IntToStr(round(StrToFloat(GPGGA[7]) * 1.852);

alcaeus 11. Nov 2004 22:48

Re: extended to string
 
Hi btbe,

der Fehler liegt in dieser Zeile:
Delphi-Quellcode:
Label17.Caption := round(GPGGA[7] * 1,852);
GPGGA[7] ist ein String, und das Ergebnis muss wieder ein String sein, also sollte die Zeile so lauten:
Delphi-Quellcode:
Label17.Caption := FloatToStr(round(StrToFloat(GPGGA[7]) * 1,852));
Greetz
alcaeus

Union 11. Nov 2004 22:52

Re: extended to string
 
Zitat:

Zitat von btbe
Oh sorry, so tritt kein fehler auf, aber wenn ich halt umrechen will:

Delphi-Quellcode:
ordne(rmcline);
Label16.Caption := GPGGA[2];
Label17.Caption := round(GPGGA[7] * 1,852);
Label18.Caption := GPGGA[9];
hab alles mögliche probiert (floatostr(), floattoint(), strtofloat(), floattostf(),....)
bin verzweifelt

Was steht denn in GPGGA[7] drin ? Normal wäre der Aufbau bei einem NMEA.GPG-Satz im englischen Format. Also sind die Strings '123.456' und das geht auf dem deutschen Windows nicht umzuwandeln. Entweder Du ersetzt den Punkjt durch ein Komma (dann funktioniert es aber wieder nur bei Localen mit ebendieser Definition) oder Du änderst die Locale-Einstellungen vor der Umwandlung, setzt als Decimal Delimiter den Punkt und hinterher wieder zurück. Zum Testen kannst Du ja mal in Deiner Systemsteuerung das Dezimaltrennzeichen auf den Punkt setzen, dann läuft das Programm wahrscheinlich auch ohne Änderung.

btbe 11. Nov 2004 22:53

Re: extended to string
 
Dann bekomm ich eine "Debugger Exception Notification":
Zitat:

Project Project.exe raised exception class EConvertError with message''000.0' is not a valid floating point value'...
dazu ist zu sagen, dass der wert nur 000.0 ist, da dies der geschwindigkeitswert des gps ist und es sich natürlich an meinem pc nicht bewegt!

Dani 11. Nov 2004 22:59

Re: extended to string
 
Man kann den Dezimal Seperator auch "manuell" setzen.
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
 DecimalSeperator := '.';
end;

Union 11. Nov 2004 22:59

Re: extended to string
 
Zitat:

Zitat von btbe
Dann bekomm ich eine "Debugger Exception Notification":
Zitat:

Project Project.exe raised exception class EConvertError with message''000.0' is not a valid floating point value'...
dazu ist zu sagen, dass der wert nur 000.0 ist, da dies der geschwindigkeitswert des gps ist und es sich natürlich an meinem pc nicht bewegt!

Dann verwende doch StrToFloatDef(), da kannst Du einen Vorgabewert (z.B. 0) setzen und es gibt keine Exception.

btbe 11. Nov 2004 23:00

Re: extended to string
 
Super Union scheint zu funzen muss halt morgen noch mal bei der fahrt testen aber ich bekomm schonmal einfach 0 ausgegeben! Hast du zufällig ne schnelle möglichkeit den '.' durch ein komma zu ersetzen? Muss keine funktion sein, da ich es sowieso nur für diesen einen wert brauche! Wäre nur praktisch, wenn ich das umwandeln könnte, da ich das programm ja auf jedem beliebigen rechner verwenden will und nicht auf jedem rechner erst das dezimalzeichen umstellen will...

schonmal danke!


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