Programmparameter aus String extrahieren
-
Hallo,
Wie kann ich aus einem String, der den Programmnamen mit Parametern enthält die Parameter (und den Dateipfad\name) extrahieren?
Mein Problem ist, dass es so viele verschiedene Möglichkeiten der Parameter gibt
( "/","-"," ") hat der Builder da eine Funktion? oder weiß jemand wies einfach geht?
Danke im voraus
BCB6-User
-
Hallo
die Parameter werden ausschließlich durch Leerzeichen getrennt.
Siehe dazu das Beispiel der BCB-Hilfe zu ParamStr().
Alle anderen Sonderzeichen sind anwendungspezifisch.bis bald
akari
-
OK Das Problem wäre dann gelöst, aber was ist, wenn im Pfad auch Leerzeichen sind? (z.B. "C:\Programme\Beispiel Programm\Prog.exe param)
-
Hallo
wie in der BCB-Hilfe steht, muß dann der Pfad in Anführungszeichen
Program.exe "C:\Programme\Beispiel Programm\Datei.fil"Die Anführungszeichen tauchen dann in ParamStr() nicht auf.
bis bald
akari
-
OK jetzt hab ichs verstanden.
Vielen Dank für deine Hilfe
-
So ich hab jetzt die Funktion geschrieben und gleich ausprobiert:
void __fastcall TMainForm::ExtractParams(AnsiString FullName,TStringList &Ausgabe) { AnsiString Suchstring = FullName; AnsiString Pfad; bool KeineParam = false; if(FullName.SubString(0,1)=="\"") { //Erstes Zeichen ist " if(FullName.SubString(FullName.Length(),1)=="\"") { //Kompletter Name in Anführungszeichen - " entfernen und Suchstring ändern Pfad = FullName.SubString(2,FullName.Length()-2); KeineParam = true; } else { //Pfad+Name in Anführungszeichen, danach Parameter - Pfad und Suchstring ändern int ZwAnf = (FullName.SubString(2,FullName.Length()-1)).AnsiPos("\""); Suchstring = FullName.SubString(ZwAnf+2,FullName.Length()-ZwAnf); Pfad = FullName.SubString(2,ZwAnf-1); delete &ZwAnf; } } //Pfad extrahieren: if(Pfad=="") { TStringList *TempListEP1 = new TStringList; split(*TempListEP1,Suchstring," "); Pfad = TempListEP1->Strings[0]; } //Parameter extrahieren: TStringList *TempListEP2 = new TStringList; if(!KeineParam) split(*TempListEP2,Suchstring," "); TStringList *ausgabe = &Ausgabe; ausgabe->Add(Pfad); for(int i=1;i<TempListEP2->Count;i++) ausgabe->Add(TempListEP2->Strings[i]); }Zur Erklärung: split(TStringList,String eingabe,String delimiter) teilt den String eingabe an den Zeichen delimiter in die StringList auf.
Bisher hat alles gut geklappt, bis ich auf folgendes Programm gestoßen bin:
"D:\Programme\TuneUp Utilities\MemOptimizer.exe autostart" (ohne Anführungszeichen!)Wie soll man da wissen, was die Parameter sind

Gruß,
BCB6-User