AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

universaler record in Klasse

Ein Thema von mtbf40 · begonnen am 27. Jan 2020 · letzter Beitrag vom 30. Jan 2020
Antwort Antwort
mtbf40

Registriert seit: 11. Okt 2013
3 Beiträge
 
#1

universaler record in Klasse

  Alt 27. Jan 2020, 18:30
Hallo,

ich habe folgendes Problem:

ich möchte verschiedene xml-Files, von verschiedenen Applikationen aus, parsen. Dafür schreibe ich eine Unit mit einer Klasse.
Die wichtigste Eigenschaft dabei soll ein Record werden, der die Struktur, generiert über eine XPATH Anweisung, abbildet.
Aus den einzelnen Applikationen sollen jetzt unterschiedlich aufgebaute Records übergeben werden.

Die XML und die jeweilige Applikation (mit den Records) sind aufeinander abgestimmt. Die XML-Unit soll weitesgehend generisch sein, wird aber auch funktionell auf verschiedene XML's
abgestimmt - d.h. ich übergebe den XML-Filename, XPATH-Pattern und einen speziellen Parameter - dieser dient dazu unterschiedliche Prozeduren/Funktionen aufzurufen die die speziellen Records zu füllen.

Das ganze sieht ungefähr so aus:
Bsp. XML
Code:
<CONFIG>
  <!-- Section general Properties -->
  <generalProperties>
    <credentials>
      <server>test_s1</server>
      <scp_user>xy</scp_user>
      <sshKey>key.ppk</sshKey>
    </credentials>
  </generalProperties>
  <Testers>
    <Tester Type='T1'>
      <Program>prog.exe</Program>
      <SPath>C:\Program Files\zap\bin</SPath>
      <dest>/unix/calibrationdata_mflex</dest>
      <cPath Path='Tester'>
        <ProgPath>C:\Program Files\Tester</ProgPath>
        <cFiles>CurrentConfig.txt</cFiles>
      </cPath>
      <cPath Path='DCCM'>
        <ProgPath>C:\Program Files\SupportBoard\DCCM</ProgPath>
        <cFiles>*.txt;*.csv</cFiles>
      </cPath>
      <cPath Path='POOL_Logs'>
        <ProgPath>C:\Program Files\POOL_Calibration_Logs</ProgPath>
        <cFiles>*</cFiles>
      </cPath>
    </Tester>
    <Tester Type='T2'>
       .
       .
       .
    </Tester>
  </Testers>

es gibt jetzt z.B. 2 Records
Delphi-Quellcode:
// Record 1
credR = record
    server : string;
    scp_user : string;
    sshKey : string;
   end;
  credPtr = ^credR;

// Record 2
  xmlRec = record
    Program : TStringList;
    cPath : cPathDict;
    SPath : string;
    dest : string;
  end;
  xmlPtr = ^xmlRec;
diese beiden Records befinden sich in einer Applikation
In der xml-Unit ist jetzt eine Klasse definiert wie:

Delphi-Quellcode:
  TXML = Class
  private
  FRC : Integer;
  FErrStr : string;
  debugS : string;
  FxmlF : PAnsiChar;
  FxmlPar : string;
  FPattern : PAnsiChar;
  Fdebug : TStrings;
  public
    constructor Create(dpar : string);
    Destructor Destroy; override;
    procedure/function readXML(XMLfile : xx; .. : yy...);

// xmlRec : ??????????
    property xmlFile : string Read FxmlF;
    property xmlPar : PAnsiChar Read FxmlPar;
    property rc : Integer Read FRC;
    property errStr : string Read FErrStr;
    property pattern : PAnsiChar Read FPattern;
    property debugL : TStrings Read Fdebug Write Fdebug;
  end;
Was ich jetzt gern machen würde wäre folgendes:
in der Applikation wird die Klasse initialisiert, der Record 1 wird übergeben und durch eine Procedure/Function in der Unit gefüllt
in einem späteren Schritt möchte ich über eine andere Procedure/Function den Record 2 füllen

Ich hoffe es ist einigermaßen verständlich

Meine Frage: ist dies möglich und wenn ja dann WIE??
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: universaler record in Klasse

  Alt 28. Jan 2020, 14:20
Welche Delpi-Version setzt du ein?
Bei einer neueren kannst du dein Problem mit Generics leicht erschlagen.
  Mit Zitat antworten Zitat
mtbf40

Registriert seit: 11. Okt 2013
3 Beiträge
 
#3

AW: universaler record in Klasse

  Alt 28. Jan 2020, 14:46
Delphi 10.3
den Pfad der Generics habe ich auch schon betreten - mir fehlt aber der Einstieg - vor lauter Pfaden sehe ich den Weg nicht...
  Mit Zitat antworten Zitat
ISMIRSCHLECHT

Registriert seit: 17. Dez 2018
Ort: Görlitz
69 Beiträge
 
#4

AW: universaler record in Klasse

  Alt 30. Jan 2020, 10:46
Hi,

sind die verschiedenen "Gestalten" der Datenobjekte vorher bekannt oder muß man bei jedem Anwendungsfall auf eine neue, unerwartete Struktur des XML-Files resp. Datenobjekts gefaßt sein ?
Und ich würde keine Records, sondern gleich Objekte erzeugen, obwohl Records in Delphi 10 schon heftig den Objekten ähneln.
ism
  Mit Zitat antworten Zitat
mtbf40

Registriert seit: 11. Okt 2013
3 Beiträge
 
#5

AW: universaler record in Klasse

  Alt 30. Jan 2020, 15:43
so - ich habe jetzt mal ein Bild erstellt - hoffe das es jetzt etwas verständlicher ist
Falls noch Unklarheiten bestehen sollten einfach fragen - ich kann auch das Original hochladen, wenn nötig
Das Schema habe ich mit yEd erstellt
Miniaturansicht angehängter Grafiken
igxl_wrapper.jpg  
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:47 Uhr.
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