kombinieren mehrerer Strings zu einem argument

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • kombinieren mehrerer Strings zu einem argument

    Ich habe immer noch Probleme mit den Checkboxen in meiner App.

    Ich habe jetzt eine Möglichkeit gefunden die Argumente in einen String zu packen je nachdem ob eine Checkbox aktiviert ist oder nicht.


    Quellcode

    1. @IBAction func FormatFloppy(_ sender: Any) {
    2. FormatieredieFloppy()
    3. }
    4. @IBAction func WarpBoxCheck(_ sender: Any) {
    5. if WarpBox.state == .on{
    6. print("warp an")
    7. self.warpArgument = "-w"
    8. }
    9. }
    10. @IBAction func BumBoxCheck(_ sender: Any) {
    11. if BumBox.state == .on {
    12. print("bum an")
    13. self.bumArgument = "-B"
    14. }
    15. }
    16. @IBAction func Drive1571BoxCheck(_ sender: Any) {
    17. if Drive1571Box.state == .on{
    18. TwoSidedBox.isHidden = false
    19. self.floppyTypeArgument = "--drive-type=1"
    20. }else{
    21. TwoSidedBox.isHidden = true
    22. }
    23. }
    24. @IBAction func TwoSideBoxCheck(_ sender: Any) {
    25. if TwoSidedBox.state == .on{
    26. self.twoSideArgument = "-2"
    27. }
    28. }
    29. let combineArguments = ["\(warpArgument ?? "")", "\(bumArgument ?? "")", "\(floppyTypeArgument ?? "")", "\(twoSideArgument ?? "")"]
    Alles anzeigen
    Ergebnis wenn nur die BumBox den state .on hat ist : ["", "-B", "", ""]
    mit:
    let finalArguments = combineArguments.filter { $0.starts(with: "-") } lösche ich die leeren raus, Ergebnis: ["-B"]
    Wenn ich jetzt allerdings ein Argument für meinen Process daraus machen möchte bekomme ich bei : runCommandCopy2Floppy("/usr/local/bin/d64copy", with: ["\(finalArguments)", "\(d64Name", "8"])
    dieses Ergebnis: ["[\"-B\"], /Users/marcoraap/C64/Demo D64/coma-light-13-by-oxyron/side1.d64", "8"]
    was ich weg haben muss ist "[\" sowie das "] hinter dem -B.

    kann mir bitte jemand helfen?
  • MyMattes schrieb:

    tjost1975 schrieb:

    sind allerdings 2 Werte müssten die mit einem Leerzeichen getrennt werden.
    Könntest Du nicht einfach das führende Leerzeichen mit in den jeweiligen Argument-String aufnehmen, z. B. self.floppyTypeArgument = " --drive-type=1"...?
    Mattes
    Das geht leider nicht. So bald hinder dem eigentliche process "d64copy" und dem Argument "-w" ein Leerzeichen zu viel ist geht es nicht.


    Wolf schrieb:

    Moin, ist das nicht ein normaler String was du haben möchtest?

    die kannst doch einfach zusammenschrauben...


    Quellcode

    1. var fertigerString = ""
    2. fertigerString += "noch was hinten dran"
    3. ....
    Da kannst dich doch Problemlos austoben...
    Guter Ansatz leider fehlen da die Leerzeichen zwischen den Argumenten: ["B-w", "/Users/marcoraap/Downloads/ald_calculation/ALD_Calculation_Side1.d64", "8"]
    scheint das gleiche wie append zu sein. und funktioniert.

    manoh schrieb:

    Bau halt einfach die Argumenten-Liste, ein Array von Strings, vor dem Ausführen von runCommandCopy2Floppy zusammen. Also Frage die Checkboxen ab und wenn gesetzt, dann füge die passende Option zum Array hinzu (append()).
    erste Versuche sehen gut aus.

    ich bin begeistert. sieht gut aus. mehr kann ich davon nicht Teste weil mir die Hardware dazu fehlt :)
    Danke

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von tjost1975 ()

  • Neues Problem.
    Ich frage also in der IBAction der jeweiligen CheckBox ab on state.on ist, wenn ja dann combineArguments.append ("-w") das geht, wenn ich jetzt allerdings mich im Nachhinein entscheide den state wieder auf .off zu setzen, wie entferne ich das Argument ohne die bisher gespeicherten Werte zu löschen?
  • manoh schrieb:

    Hast Du den Code dafür sowieso nicht schon?

    Quellcode

    1. var args = Array<String>()
    2. if WarBox.state == .on {
    3. args.append("-w")
    4. }
    5. ...
    6. runCommandCopy2Floppy("/usr/local/bin/d64copy", with: args)
    Das habe ich so "im Prinzip" gemacht, frage bleibt, wie lösche ich einen Wert wenn die Box wieder .off hat,
    Zur Erklärung. die eine Diskette möchte ich im Warp modus kopieren, die nächste nicht.
  • @tjost1975

    Was ich mit dem kurzen Codeabschnitt sagen wollte, wie es die anderen schon angemerkt haben, das combineArguments brauchst Du dir nicht merken. Berechne es einfach dann, wenn es gebraucht wird. Oder gibt es einen Grund, wieso man sich das merken sollte?

    Das sieht halt dann so aus

    Quellcode

    1. func Kopiered64auFloppy() {
    2. ...
    3. var args = Array<String>()
    4. if WarBox.state == .on {
    5. args.append("-w")
    6. }
    7. ...
    8. runCommandCopy2Floppy("/usr/local/bin/d64copy", with: args)
    9. }
  • Also irgendwo ist da immer noch ein Linken drin.
    Ich habe erst jetzt den Unterschied verstanden zwischen setzen des append in der IBAction und in der Funktion selbst. Allerdings ging es mit einer globalen variable besser.


    Quellcode

    1. func Kopiered64aufFloppy(){
    2. var combineArguments = ""
    3. if WarpBox.state == .on{
    4. print("warp an")
    5. combineArguments.append("-w")
    6. print(combineArguments)
    7. }
    8. if BumBox.state == .on {
    9. print("bum an")
    10. combineArguments.append("-B")
    11. print(combineArguments)
    12. }
    13. if Drive1571Box.state == .on{
    14. TwoSidedBox.isHidden = false
    15. combineArguments.append("--drive-type=1")
    16. print(combineArguments)
    17. }
    18. if TwoSidedBox.state == .on{
    19. combineArguments.append("-2")
    20. print(combineArguments)
    21. }
    22. let info = "Copy Disk Image to Floppy"
    23. self.OutPut.stringValue = info
    24. let d64Name = DateiauswahlName.stringValue
    25. self.OutPut.stringValue = combineArguments
    26. runCommandCopy2Floppy("/usr/local/bin/d64copy", with: ["\(combineArguments)", "\(d64Name)", "8"])
    27. }
    Alles anzeigen
    Wenn ich das so mache und nur einen Wert angebe dann bekomme ich das Ergebnis;

    ["-w", "/Users/marcoraap/Downloads/ald_calculation/ALD_Calculation_Side1.d64", "8"]

    und das funktioniert. Wenn ich allerdings einen 2 Wert eingebe dann bekomme ich;

    ["-w-B", "/Users/marcoraap/Downloads/ald_calculation/ALD_Calculation_Side1.d64", "8"]
    d64copy: invalid option [b]`--B' [/b]

    jetzt scheint er den ersten Buchstaben zu entfernen und dann geht es da nicht weiter. Das hatte er zuvor nicht gemacht. Ich verstehe es irgendwie nicht.
    Ich denke am besten wäre es wenn man prüfen könnte ob eine Checkbox aktiv ist und man dann quasi so etwas machen könnte
    runCommandCopy2Floppy("/usr/local/bin/d64copy", with: ["\(argWarp).ifnotEmpty", [b]"\(argBum).ifnotEmpty", "\(arg1571).ifnotEmpty", [b]"\(argtwoSide).ifnotEmpty"[/b], "\(d64Name)", "8"])[/b] }
    und wenn einer der Werte nicht da ist dieser einfach weggelassen wird inklusive dem , sonst bekommt man.

    ["-w",,, "/Users/marcoraap/Downloads/ald_calculation/ALD_Calculation_Side1.d64", "8"]

    und das wird wieder zu einem Fehler führen.
    Tut mir leid wenn ich etwas schwer von Begriff bin und mich auch nicht so gut ausdrücken kann.
    Danke für die Geduld und Hilfe.
  • Ergänzung zu manoh: wenn statt String ein Array von Strings verwendet wird,
    dann muss der Aufruf von runCommandCopy2Floppy angepasst werden.

    Quellcode

    1. // statt:
    2. runCommandCopy2Floppy("/usr/local/bin/d64copy", with: ["\(combineArguments)", "\(d64Name)", "8"])
    3. // nun:
    4. combineArguments.append(d64Name)
    5. combineArguments.append("8")
    6. runCommandCopy2Floppy("/usr/local/bin/d64copy", with: combineArguments)
    Sieht für mich einfacher aus.