Entwickler-Ecke
Basistechnologien - Parameter
Metrik - So 05.11.06 13:08
Titel: Parameter
Hallo
Ich will eine kleine Console schreiben, damit die mir arbeite abnehmen kann.
Das Programm sollte einige verschiedene Funktionen haben, die sich über Parameter einstellen lassen.
Beispiel:
Test.exe /r blabla /d bla /l huhu
die reihenfolge der Parameter muss egal sein, es darf keiner 2 mal vorkommen und es müssen nicht alle angegeben werden.
Wie kann ich das sinnvoll lösen, ohne 1000 mal abfragen zu müssen?
Codebeispiele willkommen :)
Metrik
Moderiert von
Christian S.: Topic aus C# - Die Sprache verschoben am So 05.11.2006 um 13:09
Metrik - Mo 06.11.06 15:20
Das muss doch einer wissen oder?
Oder zumindest eine Idee haben, wie man das lösen könnte?
Metrik
Christian S. - Mo 06.11.06 15:52
Vielleicht solltest Du einfach mal sagen, wie Dein bisheriger Ansatz aussieht und wo Du nicht weiter kommst.
Metrik - Mo 06.11.06 17:34
Okay
Ich würde das vom Prinzip her etwa so machen:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49:
| static void Main(string[] args) { switch (args[0].ToLower()) { case "/d": Console.WriteLine("das ist ein test mit /d"); break; case "/p": Console.WriteLine("das ist ein test mit /p"); break; case "/l": Console.WriteLine("das ist ein test mit /l"); break; default: Console.WriteLine("Error: Parameter ungültig"); break; }
switch (args[2].ToLower()) { case "/d": Console.WriteLine("das ist ein test mit /d"); break; case "/p": Console.WriteLine("das ist ein test mit /p"); break; case "/l": Console.WriteLine("das ist ein test mit /l"); break; default: Console.WriteLine("Error: Parameter ungültig"); break; } switch (args[4].ToLower()) { case "/d": Console.WriteLine("das ist ein test mit /d"); break; case "/p": Console.WriteLine("das ist ein test mit /p"); break; case "/l": Console.WriteLine("das ist ein test mit /l"); break; default: Console.WriteLine("Error: Parameter ungültig"); break; } |
So ist die Reihenfolde mal eagl(noch sehr optimierbar :))
Falls aber nich alle Parameter gefüllt werden = error
Wie kann man das abfangen?
Zusätzlich bruache ich eine Möglichkeit, um herauszufinen, wie viele Paramter definiert wurden.
Metrik
Christian S. - Mo 06.11.06 18:12
Hm. Ich würde den "Environment.CommandLine"-String über einen regulären Ausdruck untersuchen. Also alle Strings der Form "(/d|/p|/l)([^ ]+)" (evtl. noch irgendwelche Escapezeichen, bin gerade nicht sicher) finden und dann alle durchgehen.
Kha - Di 07.11.06 17:51
Metrik hat folgendes geschrieben: |
| Wie kann man das abfangen? |
Du wertest nur so viele Parameter aus, wie auch vorhanden sind?
Metrik hat folgendes geschrieben: |
| Zusätzlich bruache ich eine Möglichkeit, um herauszufinen, wie viele Paramter definiert wurden. |
args.Length ;) ?
Wenn du dir ein wenig Arbeit ersparen möchtest, kannst du auch bei The Codeproject nach Command-Line-Parameter-Parsern suchen.
Metrik - Sa 11.11.06 08:47
Hallo
Kannst du mir mal konkret sagen wie das gehen soll ?
| Zitat: |
Also alle Strings der Form "(/d|/p|/l)([^ ]+)" (evtl. noch irgendwelche Escapezeichen, bin gerade nicht sicher) finden und dann alle durchgehen. |
Danke
Metrik
Christian S. - Sa 11.11.06 11:39
Hallo!
Wie hast Du es denn probiert? Was weißt Du über reguläre Ausdrücke?
Grüße
Christian
Metrik - Sa 11.11.06 13:44
Hallo
Nichts ;)
Da ich erst beginne diese Sprache zu lernen und noch nicht so weit bei.
Also ich müsste ihrgend ne quelle oder stichwort nach dem ich suchen kann, um infos darüber zu bekommen.
Metrik
Christian S. - Sa 11.11.06 14:47
Hallo!
Schau Dir mal die Doku zur RegEx-Klasse an. Wenn man sich da ein wenig durchklickt, bekommt man auch Beispiele zu regulären Ausdrücken. Sehr gut, um was über reg. A. zu lernen, finde ich auch diese Seite:
http://tut.php-q.net/regex.html
Grüße
Christian
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!