Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Konsolenanwendung per DOS starten und Parameter übergeben


Alex* - Do 26.07.07 15:25
Titel: Konsolenanwendung per DOS starten und Parameter übergeben
Hallo,

ich habe meine erste kleine Konsolenanwendung erstellt. :lol:

In der Anwendung muss der Nutzer bisher nach dem Starten die benötigten Parameter (Datei + Anzahl) manuell eingeben.


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
Writeln('Bitte geben Sie einen Dateinamen an:');
ReadLn(usereingabe);
AssignFile(f,usereingabe);

WriteLN('Bitte geben Sie an, wie viele Dateien mit dem Inhalt erstellt werden sollen:');
ReadLn(usereingabe);
{Anzahl Dateien speichern }
Anzahl:=StrToInt(usereingabe);


Nun möchte ich jedoch diese Konsolenanwendung über das DOS Fenster starten und die bei dem Aufruf angebenen Parameter automatisch übernehmen.

Könnt ihr mir einen Tipp geben, wie ich das programmieren kann :?:

Danke schon mal im Vorraus für eure Hilfe!

LG, Alex*


JayEff - Do 26.07.07 15:31

Meinst du vielleicht so:MeinProgramm.exe C:\Datei.txt 5 ?
Du bekommst von der Funktion ParamStr(); die Parameter mit denen das Programm gestartet wird, zurück. ParamStr(0) ist Pfad&Dateiname deiner Exe-Datei, ParamStr(1) ist der erste Parameter ("C:\Datei.txt"), ParamStr(2) der Zweite ("5") etc.


Wolle92 - Do 26.07.07 16:09

x = Anzahl der Parameter, die übergeben werden

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure ParameterLesen;
var i: Integer
    prm_cnt: Integer
    prm: array [1..x] of String;
begin
  for i := 1 to x do
    prm[i] := ParamStr(i);
end;


Alex* - Do 26.07.07 16:14

user profile iconJayEff hat folgendes geschrieben:
Meinst du vielleicht so:MeinProgramm.exe C:\Datei.txt 5 ?
Du bekommst von der Funktion ParamStr(); die Parameter mit denen das Programm gestartet wird, zurück. ParamStr(0) ist Pfad&Dateiname deiner Exe-Datei, ParamStr(1) ist der erste Parameter ("C:\Datei.txt"), ParamStr(2) der Zweite ("5") etc.


Danke für die schnelle Hilfe!

Funktioniert einwandfrei!

LG, Alex


JayEff - Do 26.07.07 16:48

user profile iconWolle92 hat folgendes geschrieben:
x = Anzahl der Parameter, die übergeben werden

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure ParameterLesen;
var i: Integer
    prm_cnt: Integer
    prm: array [1..x] of String;
begin
  for i := 1 to x do
    prm[i] := ParamStr(i);
end;

:shock: Das is auf so vielen Ebenen falsch...
Erstens: prm ist eine lokale Variable. ( Ein Kommentar " //Hier mit prm arbeiten" hättest du ruhig anfügen können ;) )
Zweitens: Ob ich nun auf ParamStr(i) oder auf Prm[i] zugreife macht eigenltich nur den Unterschied, dass ich statt runden eckige Klammern benutzen muss :nixweiss: schätze, wenn ich auf 5 Mio Parameter mehr mals zugreifen muss, ist ein Array performanter als die Funktion, aber mal ehrlich - dazu sind Parameter nicht gedacht.
Drittens: bei der Deklaration von statischen Arrays werden konstante Grenzen erwartet, x als Variable geht dementsprechend nicht. Besser wäre ein dynamischer Array und seine Länge mit SetLength(arr, ParamCount) anzupassen.
viertens: prm_cnt wird nicht benutzt, wozu wurde die deklariert? :shock: