data i komma format.

Tags:    delphi

Hejsa alle.

Jeg har nogke data, som jeg skal læse fra min comport, dataene er er i kommaformat, jeg vil gerne have n mulighed, for at splitte dataene op, f.eks. i en string list el.lign.
Dataene bliver modtaget som text.

Data ex.
$GPGGA,002239.917,0000.0000,N,00000.0000,E,0,00,50.0,0.0,M,0.0,M,0.0,0000*73
$GPGSA,A,1,,,,,,,,,,,,,50.0,50.0,50.0*05
$GPRMC,002239.917,V,0000.0000,N,00000.0000,E,,,101102,,*12



Med venlig hilsen


Finn Hansen



9 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 1 karma
Sorter efter stemmer Sorter efter dato
Ved ikke lige om jeg har misforstået dit spørgsmål, men her er et svar:

Har du alle dataerne i en string ?? Isåfald kan du bruge en explode lign funktion. F.eks. som her:
Fold kodeboks ind/udKode 


Denne funktion kan tage en string og give dig et array med alle dataerne. Dette kunne f.eks. gøres sådan her:

Fold kodeboks ind/udKode 


Alle dataerne vil så ligge i delt ud i arrayet

MH.

The-Freak

Livet er for kort til at kede sig.

[Redigeret d. 16/01-05 21:21:51 af The-Freak]



Hej The freak.

Mit ex. viser 3 stk. datalinier.

Ideen er at jeg skal bruge de forskellige datalinier forskelligt, alt efter hvad hvad deres adr. er, så som '$GPGSA'.

Jeg synes dit foreslag ser rigtigt ud, så vidt jeg med mine beskedne evner kan se.

Men hvordan bruger jeg din kode, det er især delen med type jeg ikke helt forstår. jeg har lavet en ny unit med dit kodeforeslag, men jeg får en errorkode der siger Undeclared identifier: 'Explode'

Hvad gør jeg forkert, og hvordan indsætter man kode her ??


Hilsen


Finn



Hej The freak.

Mit ex. viser 3 stk. datalinier.

Ideen er at jeg skal bruge de forskellige datalinier forskelligt, alt efter hvad hvad deres adr. er, så som '$GPGSA'.

Jeg synes dit foreslag ser rigtigt ud, så vidt jeg med mine beskedne evner kan se.

Men hvordan bruger jeg din kode, det er især delen med type jeg ikke helt forstår. jeg har lavet en ny unit med dit kodeforeslag, men jeg får en errorkode der siger Undeclared identifier: 'Explode'

Hvad gør jeg forkert, og hvordan indsætter man kode her ??


Hilsen


Finn


Tror at du mangler at erklærere Explode funktionen i din interface del. Alternativt kan du flytte Explode funktionen så den er den første funktion efter Implementation starter.

Typen er kun tilføjet for at kunne returnere en Array of String. Delphi kan som standard ikke bare returnere en Array of String, så der skal en type til for at klare den.

MH.

The-Freak

Livet er for kort til at kede sig.




Hej Freak.

Jeg får stadig en error '[Error] Unit1.pas(73): Incompatible types'

hvad hulen gør jeg forkert, min kode ser sådan ud.



Finn


unit Unit1;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);

private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation
type
TExplodedString = array of String;


{$R *.dfm}

function Explode(Text: String; Seperator: String; DiscardNoneText: Boolean = False): TExplodedString;
var
I: Integer;
Tmp: String;
begin
if (Length(Text) or Length(Seperator)) = 0 then Exit;
if Length(Seperator) = 1 then begin
if Copy(Text, Length(Text)-Length(Seperator), Length(Seperator)) <> Seperator then
Text := Text + Seperator + Seperator;
end else begin
if Copy(Text, Length(Text)-Length(Seperator), Length(Seperator)) <> Seperator then
Text := Text + Seperator;
end;
I := 1;
while I < Length(Text) do begin
if Copy(Text, I, Length(Seperator)) = Seperator then begin
if DiscardNoneText then begin
if Tmp <> '' then begin
SetLength(Result, High(Result)+2);
Result[High(Result)] := Tmp;
Tmp := '';
Inc(I, Length(Seperator));
end;
Inc(I);
end else begin
SetLength(Result, High(Result)+2);
Result[High(Result)] := Tmp;
Tmp := '';
Inc(I, Length(Seperator));
end;
end else begin
Tmp := Tmp + Text[I];
Inc(I);
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
A: array of String;

begin
A := Explode('$GPGGA,002239.917,0000.0000,N,00000.0000,E,0,00,50.0,0.0,M,0.0,M,0.0,0000*73', ',');

end;

end.




Lige umiddelbart skal typen smides op i interface'et!

MH.

The-Freak

Livet er for kort til at kede sig.



Hej Freak.

Jeg har nu gjort sådan
unit Unit1;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
type
TExplodedString = array of String;




Men ved kald af functionen får jeg stadig error [Error] Unit1.pas(72): Incompatible types

mit kald ser sådan ud
procedure TForm1.Button1Click(Sender: TObject);
var
A: array of String;
StrengenMedData: String;
begin
A := Explode('$GPGGA,002239.917,0000.0000,N,00000.0000,E,0,00,50.0,0.0,M,0.0,M,0.0,0000*73', ',');

Jeg ved at jeg er ny, men jeg forstår ikke dette.


Hilsen

Finn



...procedure TForm1.Button1Click(Sender: TObject);
var
A: Texplodedstring;
StrengenMedData: String;
begin...


sådan.. din funktion kan ikke godtage en anden type som resultat

Jeppe Johansen
Jeppesoftware@hotmail.com



Hejsa begge 2.


Så virker det.


Tak Finn.



Hej igen.

Hvorfor kan jeg ikke give points til Jeppe


Finn



t