Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Eine Frage zu ParamStr(x) und Leerzeichen (https://www.delphipraxis.net/184151-eine-frage-zu-paramstr-x-und-leerzeichen.html)

Popov 3. Mär 2015 10:38

Eine Frage zu ParamStr(x) und Leerzeichen
 
Eine frage: sind Parameter, also Werte, bzw. die Sreings in ParamStr() immer von beiden Seiten getrimmt? Damit meine, kann es vorkommen, dass ein Parameter mit einem Leerzeichen beginnt oder am Ende ein Leerzeichen hat?

Aus Erfahrung würde ich sagen, dass nein. Ich kann mich nicht erinnern je einen Parameter gehabt zu haben der Leerzeichen vor oder dahinter hatte. Das ist aber nur Erfahrung.

PaddyVII 3. Mär 2015 10:41

AW: Eine Frage zu ParamStr(x) und Leerzeichen
 
Allgemein kann man keine Parameter mit leerzeichen einbauen, da sonst eine Fehlermeldung "Felhelder Parametertyp" kommt...



Aber du hast recht,befindet sich ein leerzeichen am anfang oder am Ende, wir dieses später nichtmehr berücksichtigt - glaubich!

Der schöne Günther 3. Mär 2015 10:44

AW: Eine Frage zu ParamStr(x) und Leerzeichen
 
Er meint die "Kommandozeilenargumente" wenn du z.B. deine Anwendung aufrufst mit "meinProgramm.exe /someOption". Du meinst Argumente für Methoden wie
Delphi-Quellcode:
procedure someProc(ein Parameter: Integer);
begin
   // "einParameter" wäre korrekt
end;
PS: Ich würde FindCmdLineSwitch(..) nehmen, das finde ich einfacher als ParamStr(..)

PPS: Parameter werden eben doch über Leerzeichen getrennt. Wie kann ein Parameter da Leerzeichen enthalten?

DeddyH 3. Mär 2015 10:46

AW: Eine Frage zu ParamStr(x) und Leerzeichen
 
Versuch macht klug. Ich hab mal ein neues Projekt erstellt, als Start-Parameter
Zitat:

Eins___Zwei__Drei_Vier //die _ sind Leerzeichen
festgelegt und im FormCreate diesen Code:
Delphi-Quellcode:
procedure TFormTest.FormCreate(Sender: TObject);
var
  i: integer;
begin
  for i := 1 to ParamCount do
    if ParamStr(i) <> trim(ParamStr(i)) then
      ShowMessage('Mit Leerzeichen');
end;
Es kommt wie erwartet keine Meldung, Windows trimmt AFAIK Whitespaces weg.

[edit]@Schönling: Manchmal sind Leerzeichen in Kommandozeilenparametern nützlich und gewünscht, dann muss man diese aber in Anführungszeichen einschließen:
Zitat:

Dings.exe "Parameter mit Leerzeichen"
[/edit]

PaddyVII 3. Mär 2015 10:47

AW: Eine Frage zu ParamStr(x) und Leerzeichen
 
Achsoo Upps mein Fehler :oops::oops::oops::oops::oops:

hathor 3. Mär 2015 10:56

AW: Eine Frage zu ParamStr(x) und Leerzeichen
 
Wenn ich mich nicht irre, geht es mit 2 '' oder ". Muss man testen - kommt auf den konkreten Fall an. Mit eigenen Programmen kann man Parameter beliebig konstruieren.

Leerzeichen sind kein Problem mit SHELLEXECUTE.
Beispiel:
Delphi-Quellcode:
...
//wlan on
strParams:= 'wlan delete filter permission=denyall networktype=infrastructure';
ShellExecute(Application.Handle,NIL,'netsh', PWChar(strParams),NIL, SW_HIDE);
...

DeddyH 3. Mär 2015 10:59

AW: Eine Frage zu ParamStr(x) und Leerzeichen
 
Das sind ja auch einzelne Parameter.

Popov 3. Mär 2015 11:09

AW: Eine Frage zu ParamStr(x) und Leerzeichen
 
Danke euch.

Natürlich habe ich es selbst getestet, ich war mir nur nicht sicher ob es ein sich ständig wiederholender Zufall war, oder das System die Parameter "beschneidet".

hathor 3. Mär 2015 11:17

AW: Eine Frage zu ParamStr(x) und Leerzeichen
 
test" "test = ParamCount = 1
test test = ParamCount = 2
" " testtest = ParamCount = 2
" " testtest " " = ParamCount = 3

himitsu 3. Mär 2015 11:24

AW: Eine Frage zu ParamStr(x) und Leerzeichen
 
Ja, die " werden auch mittendrin beachtet.

Auch wenn es eigentlich nicht für
Delphi-Quellcode:
test" "test
gedacht ist, sondern eher für
Delphi-Quellcode:
test="test test"
oder
Delphi-Quellcode:
"test=test test"
, welches dann als
Delphi-Quellcode:
ParamStr(1) = 'test=test test'
im Programm ankommt.

Wer die Parameter unverfälscht haben will, der muß über MSDN-Library durchsuchenGetCommandLine gehen und die Parameter selber parsen.
PS: Dort sieht man dann auch, warum die Params bei 1 beginnen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:57 Uhr.

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