Instanzen einer Klasse während Laufzeit erstellen und darauf zugreifen
Verfasst: 27. Juni 2020 13:42
Hallo zusammen,
ich möchte ein kleines Tool erstellen welches Log-Dateien einer Maschine auswertet. Die Log-Datei beinhaltet alle Änderungen von diversen Parametern, welche an der Maschine getätigt wurde. Zusätzlich gibt es verschiedene Programme/Rezepte die man an der Maschine laden kann. Die Parameteränderungen beziehen sich also immer auf das geladene Rezept. Mein Ziel ist es, mit dem kleinen Tool ein Rezept auswählen zu können und die aktuell eingestellten Parameter anzuzeigen. Prinzipiell habe ich auch schon eine funktionierende Lösung gefunden - das Logfile entsprechend auszuwerten ist nicht schwierig, da man dieses einfach nur zeilenweise durchlaufen muss und nach entsprechneden Keywords wie "Load Recipe:" oder "Change Parameter XXX" durchsuchen muss. Was ich nun gerne thematisieren möchte, ist die Abspeicherung und der Zugriff auf die interessanten Werte.
Nun erstmal ein Beispiel, wie so eine Log-Datei aufgebaut ist:
12.03.2020 12:31 Load Recipe: "blabla1"
12.03.2020 14:55 change Parameter "X" to "2"
13.03.2020 12:31 change Parameter "B" to "1"
13.03.2020 14:55 change Parameter "A" to "5"
14.03.2020 12:31 change Parameter "X" to "1"
14.03.2020 14:55 Load Recipe: "blabla2"
15.03.2020 12:31 change Parameter "R" to "66"
15.03.2020 14:55 change Parameter "X" to "2"
16.03.2020 12:31 change Parameter "C" to "1"
16.03.2020 14:55 change Parameter "X" to "8"
usw.
Jedes Rezept ist im Grund gleich aufgebaut und hat Parameter A bis Z. Die Dateien können mehrere MB groß sein und haben natürlich sehr viele Zeilen.
In meinem Tool soll also ein beliebiges Rezept ausgewählt werden können und der User bekommt eine Übersicht aller Paramter von A bis Z mit aktuellen, zuletzt eingestellten Werten.
Ich habe dazu zwei Methoden wie ich das programmiertechnisch lösen kann:
1. Das Log-File bei jeder neuen Rezeptauswahl komplett neu durchlaufen und es wird nur nach dem ausgewählten Rezept und dessen Parameteränderungen gesucht.
2. Das Log-File wird beim Start des Programms einmal durchlaufen und alle Werte für alle Rezepte werden direkt ermittelt und in einzelnen Textdateien (mit File-Name = Rezept-Name) abgespeichert. Bei der Auswahl des gewünschten Rezepts im Tool wird dann nur noch die entsprechende Textdatei geladen.
Nun habe ich mir gedacht, dass es doch auch eleganter gehen muss, ohne dass zusätzliche Textdateien erstellt werden. Im Grunde kann man doch eine Klasse erstellen, welche ein solches Rezept abbildet. Statt Textdateien werden dann für jedes Rezept eine Instanz dieser Klasse erzeugt.
Mein Problem ist allerdings: ich weiß nicht wie ich das Umsetzen kann bzw. wie ich dann die einzelnen Objekte ansprechend kann. Theoretisch müsste ja der Objektname (bzw. die Objektvariable) dem Rezeptname entsprechen so dass Objekte mit den Namen "blabla1" und "blabla2" erzeugt werden. Auf Parameter würde ich dann z.B. über "blabla1.get_Paramater("X")" zugreifen. Ich kann aber ein Objekt "blabla1" bisher nur direkt im Code vergeben. Geht sowas auch während der Laufzeit? "blabla1" ist ja vorher noch gar nicht bekannt....
Die Eingabe des Rezepts in der GUI des Tools würde über ein Dropdown-Menü geschehen, so dass ich den Rezept-Name eigentlich auch nur als "String" vorliegen habe. Aber ein String mit einer Objekt-Variablen kann ich irgendwie auch schwer vergleichen....
Ich hoffe, ihr versteht mein Problem.
Im Vorfeld vielen Dank für Hilfe.
ich möchte ein kleines Tool erstellen welches Log-Dateien einer Maschine auswertet. Die Log-Datei beinhaltet alle Änderungen von diversen Parametern, welche an der Maschine getätigt wurde. Zusätzlich gibt es verschiedene Programme/Rezepte die man an der Maschine laden kann. Die Parameteränderungen beziehen sich also immer auf das geladene Rezept. Mein Ziel ist es, mit dem kleinen Tool ein Rezept auswählen zu können und die aktuell eingestellten Parameter anzuzeigen. Prinzipiell habe ich auch schon eine funktionierende Lösung gefunden - das Logfile entsprechend auszuwerten ist nicht schwierig, da man dieses einfach nur zeilenweise durchlaufen muss und nach entsprechneden Keywords wie "Load Recipe:" oder "Change Parameter XXX" durchsuchen muss. Was ich nun gerne thematisieren möchte, ist die Abspeicherung und der Zugriff auf die interessanten Werte.
Nun erstmal ein Beispiel, wie so eine Log-Datei aufgebaut ist:
12.03.2020 12:31 Load Recipe: "blabla1"
12.03.2020 14:55 change Parameter "X" to "2"
13.03.2020 12:31 change Parameter "B" to "1"
13.03.2020 14:55 change Parameter "A" to "5"
14.03.2020 12:31 change Parameter "X" to "1"
14.03.2020 14:55 Load Recipe: "blabla2"
15.03.2020 12:31 change Parameter "R" to "66"
15.03.2020 14:55 change Parameter "X" to "2"
16.03.2020 12:31 change Parameter "C" to "1"
16.03.2020 14:55 change Parameter "X" to "8"
usw.
Jedes Rezept ist im Grund gleich aufgebaut und hat Parameter A bis Z. Die Dateien können mehrere MB groß sein und haben natürlich sehr viele Zeilen.
In meinem Tool soll also ein beliebiges Rezept ausgewählt werden können und der User bekommt eine Übersicht aller Paramter von A bis Z mit aktuellen, zuletzt eingestellten Werten.
Ich habe dazu zwei Methoden wie ich das programmiertechnisch lösen kann:
1. Das Log-File bei jeder neuen Rezeptauswahl komplett neu durchlaufen und es wird nur nach dem ausgewählten Rezept und dessen Parameteränderungen gesucht.
2. Das Log-File wird beim Start des Programms einmal durchlaufen und alle Werte für alle Rezepte werden direkt ermittelt und in einzelnen Textdateien (mit File-Name = Rezept-Name) abgespeichert. Bei der Auswahl des gewünschten Rezepts im Tool wird dann nur noch die entsprechende Textdatei geladen.
Nun habe ich mir gedacht, dass es doch auch eleganter gehen muss, ohne dass zusätzliche Textdateien erstellt werden. Im Grunde kann man doch eine Klasse erstellen, welche ein solches Rezept abbildet. Statt Textdateien werden dann für jedes Rezept eine Instanz dieser Klasse erzeugt.
Mein Problem ist allerdings: ich weiß nicht wie ich das Umsetzen kann bzw. wie ich dann die einzelnen Objekte ansprechend kann. Theoretisch müsste ja der Objektname (bzw. die Objektvariable) dem Rezeptname entsprechen so dass Objekte mit den Namen "blabla1" und "blabla2" erzeugt werden. Auf Parameter würde ich dann z.B. über "blabla1.get_Paramater("X")" zugreifen. Ich kann aber ein Objekt "blabla1" bisher nur direkt im Code vergeben. Geht sowas auch während der Laufzeit? "blabla1" ist ja vorher noch gar nicht bekannt....
Die Eingabe des Rezepts in der GUI des Tools würde über ein Dropdown-Menü geschehen, so dass ich den Rezept-Name eigentlich auch nur als "String" vorliegen habe. Aber ein String mit einer Objekt-Variablen kann ich irgendwie auch schwer vergleichen....
Ich hoffe, ihr versteht mein Problem.
Im Vorfeld vielen Dank für Hilfe.