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


Anmelden zum Antworten