Parsen der Kommandozeilenparameter
Guten Abend allerseits.
Vorweg: eigentlich programmiere ich mit C und C++; mit Delphi habe ich bisher noch keine Erfahrung. Jetzt habe ich aber einen Quelltext für Delphi, den in C++ umzusetzen ein sehr großer Aufwand wäre, weshalb ich versuche, ihn in eine Delphi-Kommandozeilenapplikation zu integrieren. Das klappt soweit eigentlich auch, nur habe ich nun seltsame Probleme mit meinem ersten Versuch, den Kommandozeilenparameter in mehrere Teile zu zerlegen: Der Code wird zwar fehlerfrei kompiliert, aber die Ausführung wird plötzlich abgebrochen. Hier der relevante Codeauszug:
Delphi-Quellcode:
Die über Leerzeichen getrennte Kommandozeilenparameter sollen im Array parameters der Reihe nach untergebracht werden. Nun gibt es aber zwei Probleme:
var
parameters : Array of String; procedure readParameters (); var cp, ptr : PChar; quota, escape : Boolean; ai : Integer; begin quota := false; escape := false; ptr := GetCommandLine (); ai := 1; SetLength (parameters, 1); while ptr^ <> #0 do begin if (ptr^ = '"') then // parameter in quotation marks begin quota := not quota; inc (ptr); continue; end; if (ptr^ = ' ') and (not quota) then // end of parameter begin; inc (ai); SetLength (parameters, ai); inc (ptr); continue; end; parameters[ai] := parameters[ai] + String (ptr^); inc (ptr); end; end; begin; readParameters (); { ... } end. - die Zeile
Delphi-Quellcode:
tut nicht, was sie soll: parameters[ai] ist nach der Ausführung mit ptr^='E' so leer wie zuvor.
parameters[ai] := parameters[ai] + String (ptr^);
- nach der zweiten Ausführung ebendieser Zeile springt die Applikation aus mir unerklärlichen Gründen zum Programmende. Der Code wurde unter Turbo Delphi 2006 getestet, die Quelltexte, die ich benötige, sind hier verfügbar. Hat jemand eine Erklärung für das Phänomen? Oder stellt Delphi möglicherweise Funktionen zum einfachen Parsen des Kommandozeilenparameters bereit, die mir nicht bekannt sind? |
Re: Parsen der Kommandozeilenparameter
Warum nutzt du nicht ParamCount und ParamStr?
|
Re: Parsen der Kommandozeilenparameter
Zitat:
Dennoch, kann sich jemand das seltsame Verhalten erklären? |
Re: Parsen der Kommandozeilenparameter
Dein "ai" hat den falschen wert. Wenn dein Array 1 Element groß ist, ist "ai" bei dir 1 so das du auf Index 1 zugreifst obwohl das Array 0 basiert ist.
|
Re: Parsen der Kommandozeilenparameter
Zitat:
|
Re: Parsen der Kommandozeilenparameter
Ist in C und C++ aber nicht anders. ;)
|
Re: Parsen der Kommandozeilenparameter
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:51 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