Memofeld ersetzen

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Bernie110
Beiträge: 120
Registriert: Mo 10. Feb 2020, 17:43

Memofeld ersetzen

Beitrag von Bernie110 »

Hallo Zusammen,

ich greife auf Google Maps Api zu und lasse mir das Ergebnis in
ein Memofeld übertragen.
Das Memofeld benutze ich nur um den rot markierten Wert auslesen zu können. Sprich reine Textformatierung. (Mit Pos copy ect.)
Funktioniert auch alles.
So sehen die Daten im Memofeld aus :
<value>407505</value>

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8"?>
<DistanceMatrixResponse>
 <status>OK</status>
 <origin_address>80331 München, Germany</origin_address>
 <destination_address>60210 Frankfurt, Germany</destination_address>
 <row>
  <element>
   <status>OK</status>
   <duration>
    <value>14642</value>
    <text>4 hours 4 mins</text>
   </duration>
   <distance>
    <value>407505</value>
    <text>408 km</text>
   </distance>
  </element>
 </row>
</DistanceMatrixResponse>
So ein Memofeld sollte eigentlich überflüssig sein oder ?
( Mir fiel auf die schnelle nichts besseres als ein Memofeld ein, will aber dazulernen )
Meine Frage wäre jetzt wie Ihr das zwischen-speichert um diesen Wert dann auszulesen ?
Danke im voraus für eure Antworten.
Lg Bernie

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: Memofeld ersetzen

Beitrag von wp_xyz »

Du kannst mit den Lazarus-XML Units den String in ein XMLDocument einlesen, dich durch die XML-Nodes hangeln und so das Feld direkt auslesen:

Code: Alles auswählen

uses
  laz2_xmlread, laz2_dom;

function DistanceFromGoogleMaps(XMLString: String): String;
var
  stream: TStream;
  doc: TXMLDocument;
  node: TDOMNode;
begin
  Result := '';
  stream := TStringStream.Create(XMLString);
  try
    ReadXMLFile(doc, stream);
    node := doc.DocumentElement.FindNode('row');
    if node = nil then exit;
    node := node.FindNode('element');
    if node = nil then exit;
    node := node.FindNode('distance');
    if node = nil then exit;
    node := node.FindNode('value');
    if node = nil then exit;
    Result := node.TextContent;
  finally
    doc.free;
    stream.Free;
  end;
end;

Epcop
Beiträge: 140
Registriert: Di 29. Mai 2012, 09:36

Re: Memofeld ersetzen

Beitrag von Epcop »

Oder eine String Variable nutzen statt dem Memofeld?!

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Memofeld ersetzen

Beitrag von Mathias »

Für so was einfaches würde ich eine StringList nehmen.
Dies geht einfacher eine Datei einzulesen, als mit einem einfachen String.

Bei komplexeren Sachen, würde ich wp_xyz die xml Funktionen verwenden.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Bernie110
Beiträge: 120
Registriert: Mo 10. Feb 2020, 17:43

Re: Memofeld ersetzen

Beitrag von Bernie110 »

Hallo Zusammen,

herzlichen Dank für eure Antworten. Funktioniert alles.
Hab mich aber nun für die Variante von wp_xyz entschieden.

Hätte mir den Zugriff auf die Google Maps APi und auch das auslesen komplizierter vorgestellt.
Dank eurer Hilfe 2 Std Arbeit... wer hätte es gedacht.

Danke nochmals.
Lg Bernie

Antworten