Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi ParamStr / ParamCount mit leeren Parametern? (https://www.delphipraxis.net/148145-paramstr-paramcount-mit-leeren-parametern.html)

ralfiii 23. Feb 2010 15:05


ParamStr / ParamCount mit leeren Parametern?
 
Hallo!

Ich hab grad feststellen müssen, dass ParamCount und ParamStr(i) nicht so richtig tun wie ich das gerne hätte.
Eine (Fremd-)Anwendung übergibt ein paar Parameter an meine.
Wenn ein Parameter leer bleibt, dann übergibt die Anwendung ganz brav Doppelte Anführungszeichen ("").
Nur: Delphi wirft die dann einfach weg.

D.h. ein Aufruf von
foo.exe Param1 "" "Param3" "" Param5
liefert ParamCount=3
ParamStr(1)=Param1
ParamStr(2)=Param3
ParamStr(3)=Param5

Das bei Param3 die umgebenden Anführungszeichen entfernt werden ist gut so, nicht aber, dass die leeren Parameter weggeworfen werden.
Unglücklicherweise sind die Anzahl und Position der Parameter nämlich essenziell für mich.

Gibt's da andere Methoden um das auszuwerten?

s-off 23. Feb 2010 15:12

Re: ParamStr / ParamCount mit leeren Parametern?
 
Du kannst Dir mit CmdLine den kompletten Aufruf ausgeben lassen, und dann selber parsen

Blup 23. Feb 2010 15:18

Re: ParamStr / ParamCount mit leeren Parametern?
 
Die Bedeutung der Parameter über die Position zu definieren ist kein guter Ansatz.

Besser etwas in diese oder ähnlicher Form:
foo.exe -Parametername:Wert -Parametername:Wert

ralfiii 23. Feb 2010 15:23

Re: ParamStr / ParamCount mit leeren Parametern?
 
Zitat:

Zitat von s-off
Du kannst Dir mit CmdLine den kompletten Aufruf ausgeben lassen, und dann selber parsen

:lol:
CmdLine kenn ich schon, ich will mir primär das selber-parsen sparen.

Schnell geraten scheint ExtractStrings + AnsiDeQuotedStr die Antwort auf meine Frage zu sein.
(Wenn jemand eine bessere Idee hat so möge er nun sprechen...)

DeddyH 23. Feb 2010 15:23

Re: ParamStr / ParamCount mit leeren Parametern?
 
Zitat:

Zitat von Blup
Die Bedeutung der Parameter über die Position zu definieren ist kein guter Ansatz.

Besser etwas in diese oder ähnlicher Form:
foo.exe -Parametername:Wert -Parametername:Wert

Zitat:

Zitat von ralfiii
Eine (Fremd-)Anwendung übergibt ein paar Parameter an meine.

Das klingt nicht so, als läge das in seiner Macht.

ralfiii 23. Feb 2010 15:32

Re: ParamStr / ParamCount mit leeren Parametern?
 
Zitat:

Zitat von DeddyH
Das klingt nicht so, als läge das in seiner Macht.

So ist es!
Simple Lösung:

Delphi-Quellcode:
function ExParamCount : integer;
var StrL: TStringList;
begin
     StrL:=TStringList.Create;
     try
        ExtractStrings([' '], [], CmdLine, StrL);
        result:=StrL.Count-1;
     finally
            StrL.Free;
     end;
end;

function ExParamStr(i : integer) : string;
var StrL: TStringList;
begin
     StrL:=TStringList.Create;
     try
        ExtractStrings([' '], [], CmdLine, StrL);
        if i>=StrL.Count
        then
            result:=''
        else
            result:=AnsiDeQuotedStr(StrL[i], '"');
     finally
            StrL.Free;
     end;
end;

DeddyH 23. Feb 2010 15:36

Re: ParamStr / ParamCount mit leeren Parametern?
 
Wo gibst Du die Listen denn wieder frei?

ralfiii 23. Feb 2010 15:37

Re: ParamStr / ParamCount mit leeren Parametern?
 
Zitat:

Zitat von DeddyH
Wo gibst Du die Listen denn wieder frei?

Uups.
Extra ein Try und dann das Free vergessen. tststs....

DeddyH 23. Feb 2010 15:38

Re: ParamStr / ParamCount mit leeren Parametern?
 
Dafür hast Du ja noch uns :zwinker:

Alter Mann 23. Feb 2010 16:02

Re: ParamStr / ParamCount mit leeren Parametern?
 
Das setzt aber voraus, das in den Parametern keine Leerzeichen vorhanden sind.
Gibt es darfür eine Garantie?


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:46 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz