Console: Eingabe von unterschiedlich vielen Variablen

Jigga87

Grünschnabel
Hallo alle zusamen,

erst ein mal: ich habe leider keine Ahnung, ob ich im richtigen Unterforum bin! Deshalb verzeiht mir bitte, wenn ich nicht dort bin, wo ich hin wollte/sollte.

Zu meinem Problem.
Ich habe eine Klasse, die einige Parameter hat, die ich im code setzen kann.
Ich möchte jetzt, dass der Benutzer dies auch über die Console machen kann. Dabei habe ich an folgendes gedacht:
parameterX1=0,1 parameter X3=1 parameterX7=0.3....

Es müssen aber nicht alle Parameter angegeben werden, sodass es auch sein kann, dass nur ein Parameter definiert wird.
Meine Idee ist es also, dass mein Programm die Eingave "parameterXY" als Schlüssel erkennt und diesem den eingegebenen Wert zuweist.

Wisst ihr, wie ich das realisieren kann?
 

sheel

I love Asm
Hi

sind es wirklich soviel Parameter, dass man nicht einfach ein paar if/else if,
für jeden Parameter eins, machen kann?
 

Jigga87

Grünschnabel
Hey, es sind an die 15 Stück.
Mir geht es auch mehr darum, dass ich die hintereinander weg in die Konsole eingeben kann, ohne jeden einzelnen via readline einzulesen.
Spricht gibt es eine alternative, bzw eingebaute Lösung als das ganze in eine Zeile zu tippen, in einen String zu lesen, diesen zu zerstückeln und zu parsen?
 

sheel

I love Asm
Ums zerstückeln am Leerzeichen bzw. dann jeden Teilstring
nochmal am = wirst du nicht herumkommen.

Das ist aber nur ein Methodenaufruf (Split), zumindest für die Leerzeichenstückelung.
Dann für alle Teilstrings, die ein = beinhalten (falls mehrere Leerzeichen/Tabs hintereinander waren):
Am = aufteilen, beide Teile trimmen. Ergibt Variablenname und Wert.

Wenns sich noch ändern lässt, eventuell eine Map für die betroffenen Variablen verwenden.
Sonst entweder die genannte if-Lösung oder, wenns passende Variablen sind, per Reflection.
 

Jigga87

Grünschnabel
@MCoder
Ähnliches habe ich auch bereits gefunden, das Problem dabei ist, dass es immer CommandLine Parameter sind die ausgelesen werden.
Das ganze soll aber eine Art Hilfsprojekt während der Entwicklung sein, sprich die "fertige" program.exe wird später nicht verwendet, sondern nur über VS aufgerufen.

Im Prinzip starte ich mein Programm in VS und an einer Stelle möchte ich eine Zeile einlesen, in welcher alle nötigen Informationen vorhanden sind.

Es muss doch irgendwie möglich sein auf bestimmte Parameter (evtl mit Escapezeichen) zu reagieren?
Ich hatte mir das so gedacht, dass ich in meiner Klasse für jeden Parameter eine Klassenvariable erstelle. Aus der Benutzereingabe werden dann diese Parameter erkannt und gleich in die jeweiligen Variablen gespeichert. Wenn ein Parameter nicht eingegeben wurde, bleibt diese Variable unverändert.

EDIT: Wäre es alternativ möglich die Benutzereingabe in ein string[] args einzulesen?
Dann könnte ich ja ganz leicht die bereits erwähnte Lösung benutzen :)
 
Zuletzt bearbeitet:

MCoder

Erfahrenes Mitglied
Hallo,

die Eingabe von der Konsole (ReadLine) bekommst du nur als kompletten String. Es sollte aber eigentlich kein Problem sein, die Parameter/Wert-Paare entweder mit String-Split oder auch mit Regex in ein String-Array zu bringen.

Die Vorgehensweise hat Sheel ja schon skizziert.

Gruß
MCoder
 
Zuletzt bearbeitet: