Struktur als Text speichern, wieder laden und instance zuweisen

wegi

Grünschnabel
hallo

wie das genau heißt, weiss ich nicht, deswegen nenn ich es mal Struktur.

aus dieser Struktur möchte ich einen Wert einem anderen zuweisen, also z.B.

double ziel = test1 . subClazz1 [2] . subClazz . value [5] ;

Jetzt möchte ich alles rechts vom = als Text in ein file schreiben (gibt es einen eleganten Weg, sich da durchzuhangeln?).

Jetzt möchte ich den Text wieder auslesen und einem Objekt zuweisen, damit ich dann wieder den Wert ziel zuweisen kann.

Object obj = lies_den_String_und_bastel_die _richtige_instanz( text );
double ziel = obj;


Man kann da sicherlich den Text parsen und mit getField das obj basteln, aber schon wegen des array von subClazz1 ist das recht kompliziert.
Vielleicht gibt es ja doch einen besseren Weg?


vielen Dank

Martin




TestClass test1= new TestClass();

public TestClass(){
subClazz1[0] = new SubClass1();
subClazz1[1] = new SubClass1();
subClazz1[2] = new SubClass1();

array[0] =1.0;
array[1] =2.0;
array[2] =3.0;

subClazz1[0].value =11.0;
subClazz1[1].value =22.0;
subClazz1[2].value =33.0;
}

class SubClass1 {
public double value = 2.22;
public SubClass2 subClazz = new SubClass2();
}

class SubClass2 {
public double value[10];
value[5] = 3.33;
}
 
1. Benutz [ code=java ] tags für den code :) (oder code tags)

2. Mir ist noch nicht so richtig klar, was dein Ziel ist. Außer das du Daten in eine lesbare Text-Datei speichern willst.

Ich glaube kaum, dass du "test1 . subClazz1 [2] . subClazz . value [5] ;" in der Textdatei speichern willst, sondern den Inhalt davon?^^

Wenn du den Inhalt davon speichern willst, ist die Frage wie der Inhalt genau vorliegt?

Da gibt es Dutzend verschiedene Techniken. Z.b. als CSV, XML, JSON, ObjectOutputstream.
 
>Mir ist noch nicht so richtig klar, was dein Ziel ist. Außer das du Daten in eine lesbare Text-Datei speichern willst.
>Ich glaube kaum, dass du "test1 . subClazz1 [2] . subClazz . value [5] ;" in der Textdatei speichern willst, sondern den Inhalt davon?^^

doch ich will den weg zu der Variablen speichern.
Hintergrund: Es gibt eine Schnittstelle zu einem anderen Programm, mit dem ich Daten austausche. Den Austauch muss ich zur Laufzeit konfigurieren können.
Dafür habe ich für 2 Auswahl-Bäume verfügbarer Variablen in beiden Programmen. In beiden Bämen suche ich Variablen aus und definiere, ob ich schreiben oder lesen will.
Diese Auswahl soll in eine XML-Configuration geschrieben werden.
z.B.
<opc name="OPC Settings" opc_server="tester" host="localhost" refresh_time="5000" connected="false">
<opc_read name="OPC Read Items">
<opc_item name="Solid Mass Inlet 1" item="OPC_mass.Real1" local="test1 . subClazz1 [2] . subClazz . value [5]" conversion_factor="1.782" active="true" write ="true"
/>
</opc>

Das möchte ich dann aus der Konfig auslesen. damit ich dann wieder die Werte einander zuordnen kann.
Damit das gehen kann, muss ich zuerst die ausgewählte Variable in einen String umwandlen, was ja noch geht,
da ich es aus einem Baum ausgewählt habe und somit die Struktur kenne. Schöner wäre es, wenn man das direkt aus der Struktur lesen könnte.
Der umgekehrte Weg muss dann wieder aus dem String die Instanz basteln.

martin
 
Zuletzt bearbeitet:
Ich habe mir eine ähnliche Frage auch schon mal gestellt; darufhin habe ich ein Konzept entworfen, das ich bisher aus Zeitgründen noch nicht realisiert habe. Hier ist es:
  • Als erstes definiert man ein Interface, das ich einfach mal XmlExchangable nenne. Dieses Interface beinhaltet zwei Funktionen, die wir beispielsweise als createXmlNode und setupFromXmlNode bezeichnen.
  • Die Funktion createXmlNode ist dafür zuständig, die relevanten Variablen und ihre Werte als Xml-Baum zurückzuliefern; als Wurzelknoten dien dabei ein Node, der das Objekt identifiziert, beispielsweise '<TestClass>', die Kind-Knoten repräsentieren dann die jeweiligen Variablen und ihre Werte, beipspielsweise '<opc_server value="tester">'.bekommt als Parameter einen XmlNode, den das Objekt dazu nutzt, die für sich relevanten Attribute und Unterknoten auzulesen und seine Variablen entsprechend zu setzen; Arrays werden dabei als Unterbäume dargestellt. Einfache Datentypen können direkt dargestellt werden, für Objekte wird dann deren Interface-Methode createXmlNode aufgerufen und deren zurückgelieferter Baum an passender Stelle eingehängt. Zum Schluss wird der so erzeugte Xml-Baum als Funktionswert zurückgeliefert.
  • Die Funktion setupFromXmlNode funktioniert genau umgekehrt: sie bekommt einen XmlNode als Parameter übergeben, liest die Werte aus, und kann dann seine Variablen entsprechend setzen; Werte für Variablen einfacher Datentypen können direkt gesetzt werden, bei Objekten wird zuerst per Konstruktor ein neues Objekt erzeugt und dann dessen Funktion setupFromXmlNode mit dem dazugehörigen childNode aufgerufen. Arrays werden zuerst über einen Vector oder eine LinkedList aufgebaut, deren toArray-Methode dann bei Bedarf aufgerufen wird.
(!)Du musst aber aufpassen, dass deine Daten intern auch als Baum organisiert sind, weil sonst eine Endlosschleife entsteht.
 
Zuletzt bearbeitet:
Zurück