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 user profile iconChristian 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)
        {
            //der zweite Parameter ist dann der imput der verwertet wird.
            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

user profile iconMetrik hat folgendes geschrieben:
Wie kann man das abfangen?

Du wertest nur so viele Parameter aus, wie auch vorhanden sind?
user profile iconMetrik 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