Alles hinter 'run' rausholen

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von ~blaze~.

    Alles hinter 'run' rausholen

    Hallo,

    ich versuche mich aktuell an nem kleinen WPF-Projekt, nun stehe ich vor nem kleinen man kann sagen Anfänger Problem. Ich würde gerne alles was hinter 'run' steht in einen String schreiben sagen wir mal folgenden Input macht der User: ​run test.exe, davon würde ich gerne ​test.exe in einen String schreiben lassen, nur leider habe ich aktuell keine Ahnung wie ich dies machen kann, ich hoffe Ihr peinigt mich nicht dafür aber das ist mein erstes C#-Projekt seit langem ;( Hoffe mir kann da jemand helfen, werde jeden Vorschlag ausgiebig testen ;)

    Gruß,
    Jan
    Software being "Done" is like lawn being "Mowed". (Jim Benson)
    Der SubString ist eigentlich ganz einfach zu handeln:

    C#-Quellcode

    1. string myString = "Hallo";
    2. string test = myString.Substring(1); // ist allo, da der string geteilt wurde: alles ab position 1 (nullbasierte Charzählung!) ist im String drin.


    LG
    Hab es jetzt folgendermaßen geschafft:

    C#-Quellcode

    1. if (e.Key == Key.Enter)
    2. {
    3. /* the run command */
    4. string cmnd;
    5. string rnprc; // the name of the application such as 'chrome'
    6. string exeadi = ".exe"; // executable addition
    7. int fnd;
    8. if (inputBox.Text.Contains ("run"))
    9. {
    10. cmnd = inputBox.Text;
    11. fnd = cmnd.IndexOf("run");
    12. rnprc = cmnd.Substring(fnd + 4);
    13. Process.Start(rnprc + exeadi);
    14. inputBox.Clear();
    15. }
    16. }
    Software being "Done" is like lawn being "Mowed". (Jim Benson)
    Wie du es machst, ist dir überlassen. Es könnte nur zu schwierigkeiten mit der If-Abfrage kommen, weil die auch True zurückliefert, wenn in der TextBox ​asdfghjkrun drinsteht. Das würde Ich lieber zu sowas ersetzen: msdn.microsoft.com/de-de/libra…startswith(v=vs.110).aspx

    LG
    erst Contains abzufragen, und nachher nochmal IndexOf ist doppelt gemoppelt

    C#-Quellcode

    1. if (e.Key != Key.Enter) return;
    2. string cmnd = inputBox.Text;
    3. var fnd = cmnd.IndexOf("run");
    4. if (fnd < 0) return;
    5. var rnprc = cmnd.Substring(fnd + 4);
    6. //...
    Ich hab auch durch geeigneten Einsatz von return bewirkt, dass keine Klammer-Verschachtelung vonnöten ist.
    Werde die Methoden von @~blaze~ und @ErfinderDesRades morgen ausprobieren da ich nichtmehr am Laptop bin. Das mit C:\Program Files is mir aich aufgefallen :)
    Software being "Done" is like lawn being "Mowed". (Jim Benson)
    Hab' mich mal nochmal drangesetzt, weil ich sowas auch schon öfters hätte brauchen können:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Text
    2. Public Class ConsoleHandler
    3. Public Shared Function GetArgs(input As String) As String()
    4. If input Is Nothing Then Throw New ArgumentNullException("input")
    5. Dim mark As Integer = 0, index As Integer = 0
    6. Dim output As StringBuilder = Nothing 'output ist für Spezialfälle reserviert, in denen die Eingabe von der Ausgabe abweicht
    7. Dim len As Integer = input.Length
    8. Dim args As New List(Of String)()
    9. Do
    10. 'Aktuelles Zeichen ein '"'
    11. If index = len OrElse Char.IsWhiteSpace(input, index) Then 'Wenn es ein Leerzeichen ist, neues Argument anfangen, letztes Argument ebenfalls aufnehmen
    12. If mark <> index Then
    13. args.Add(input.Substring(mark, index - mark))
    14. End If
    15. mark = index + 1
    16. If index = len Then ' nach letztem Argument abbrechen
    17. Exit Do
    18. End If
    19. ElseIf input(index) = """"c Then
    20. 'x"..." nicht zulassen
    21. If mark <> index Then Throw New FormatException()
    22. mark += 1
    23. 'solange lesen, bis ein '"' erreicht wird, das nicht von einem weiteren '"' gefolgt ist
    24. Do
    25. index += 1
    26. If index = len Then Throw New FormatException()
    27. 'wenn ein '"' erreicht wurde
    28. If input(index) = """"c Then
    29. Dim tmp As Integer = index + 1
    30. If tmp <> len Then 'überprüfen, ob der darauf folgende Buchstabe ein '"' ist, also "...""..."
    31. If input(tmp) = """"c Then
    32. 'Eingabe weicht also von Ausgabe ab, da "...""..." zu ..."... umformattiert wird
    33. '"[..."]"... das zwischen [] ist der Initialwert im StringBuilder
    34. index = tmp
    35. If output Is Nothing Then
    36. output = New StringBuilder(input, mark, index - mark, 16 + (index - mark) * 2)
    37. Else
    38. 'der Wert ist bereits ein Spezialwert ("...""...""...")
    39. output.Append(""""c)
    40. End If
    41. ElseIf Not Char.IsWhiteSpace(input(tmp)) Then ' z.B. "..."xx nicht zulassen, aber "...""..." und "..." schon.
    42. Throw New FormatException()
    43. Else
    44. Exit Do
    45. End If
    46. Else
    47. Exit Do
    48. End If
    49. ElseIf output IsNot Nothing Then 'Für Spezialfälle den Buchstaben anhängen
    50. output.Append(input(index))
    51. End If
    52. Loop
    53. 'Ausgabe generieren
    54. If output IsNot Nothing Then 'Spezialfälle
    55. args.Add(output.ToString())
    56. output = Nothing
    57. Else 'Sonstige Fälle
    58. args.Add(input.Substring(mark, index - mark))
    59. End If
    60. mark = index + 1
    61. ElseIf output IsNot Nothing Then
    62. output.Append(input(index))
    63. End If
    64. index += 1
    65. Loop
    66. Return args.ToArray()
    67. End Function
    68. End Class


    Achso, war eigentlich für C# gedacht. Na egal, einmal durch den Converter durchjagen und fertig.

    Gruß
    ~blaze~