![]() |
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 ![]() 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
|
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 02:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz