String nach String auslesen

  • Moin zusammen,

    ich Blick mal wieder in die Röhre und brauche Hilfe bei einem Thema was für Euch wahrscheinlich nur ein Kinderspiel ist.

    Ich benötige aus einem String einen bestimmten Teil.

    Der Zeile lautet wie folgt:

    Code
    Versanddatum der Berechnung: XX.XX.XXXX

    Nun probiere ich hier die ganze Zeit rum aber ich bekomme es nicht hin, dass er mir den Teil HINTER dem Doppelpunkt ausliest... :(

    Folgenden Code habe ich derzeit zum testen im Skript:


    AutoIt
    $result = StringMid($sOutput15, StringInStr($sOutput15, "Berechnung: ", 0, -1),10)		
    MsgBox(0, "Ergebnis:", $result)

    Er sucht und findet nun auch das Wort "Berechnung" und ich dachte, dass er durch den Parameter 10 am Ende nun 10 Zeichen nach meinem String sucht und diesen ausgibt. Allerdings sucht er nicht nach, sondern ab dem Wort und das ist nicht das, was ich will. Die MsgBox gibt als Wert jetzt natürlich "Berechnung" aus, aber ich will ja den Teil dahinter, der jedesmal anders ist, da es sich hier um ein Datum handelt.

    Ich hoffe das war verständlich für Euch, aber ich denke schon :)

    Gruss
    Mirko

    Mein AutoIT Smartphone GUI >>hier<<

    Der Mensch ist das einzige Tier, dass arbeiten muss.

  • AutoIt
    Global $str = "Versanddatum der Berechnung: XX.XX.XXXX"
    Global $jo
    
    
    $jo = StringSplit($str, ":")
    $jo = $jo[2]
    
    
    MsgBox(0,"", $jo)

    €dit:

    AutoIt
    Global $str = "Versanddatum der Berechnung: XX.XX.XXXX"
    $str = StringMid($str, 30)
    MsgBox(0,"", $str)

    Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.

    • Offizieller Beitrag

    Viele Wege führen nach Rom. Statt StringSplit kannst du auch mit Trim arbeiten. Das StringStripWS dient dann dazu evtl. Leerzeichen vor und hinter dem gewünschten Text zu entfernen.

    AutoIt
    $sOutput15 = "Versanddatum der Berechnung: XX.XX.XXXX"
    $result = StringStripWS(StringTrimLeft($sOutput15, StringInStr($sOutput15, ":")), 1+2)
    ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & "   var: $result --> " & $result & @LF)

    Bei der Nutzung von StringSplit mußt du das Ergebnis nicht zwingend in einer Variablen auffangen, wenn SICHER ist, dass der Splitparameter enthalten ist.
    Dann kannst du auf den Arrayeintrag direkt verweisen:

    AutoIt
    $str = "Versanddatum der Berechnung: XX.XX.XXXX"
    ConsoleWrite( (StringSplit($str, ":"))[2] & @CRLF)
  • Hey x0r,

    das hilft mir in der Tat nur bedingt weiter - an die zweite Möglichkeit hatte ich mich auch schon gewagt...

    Tatsächlich ist es so, das der String weitaus länger ist, als nur der Schnipsel den ich oben gepostet habe.

    Man kann es sich als eMail vorstellen:

    ....
    ....
    ....
    Kosten: XXX
    Versanddatum der Berechnung: XX.XX.XXXX
    ....
    Verpackung: XXX
    ....
    ....

    (die obigen Daten sind fiktiv... da stehen natürlich noch weit mehr drin, aber halt nach dem Schema "Begriff" : "Wert")

    Das Problem ist, dass die Daten davor oder danach immer variieren, daher kann ich nicht $str = StringMid($str, 30) arbeiten, da der gesuchte Wert ja nicht immer an der selben Stelle steht. Ich kann nur sagen, dass der Inhalt immer in dem festgelegten Satz auftaucht. Daher war meine Idee diesen Satz bzw eher das Begriff "Berechnung: " zu suchen und mir dann einfach 10 Zeichen danach auszulesen - dort würde halt immer das Datum stehen.

    Die erste Variante mit dem Doppelpunkt nützt mir auch nichts, da der gesamte String etliche Einträge mit den Doppelpunkten aufweist, aber ich will ja speziell nur diesen einen einzigen Eintrag...

    Mein AutoIT Smartphone GUI >>hier<<

    Der Mensch ist das einzige Tier, dass arbeiten muss.

    3 Mal editiert, zuletzt von mirko2002 (27. August 2015 um 11:14)

    • Offizieller Beitrag

    Das ist das Problem, wenn der Fall nur halbherzig geschildert wird.
    Bevor ich dir eine Lösung präsentiere, zwei Fragen:
    - Ist das das einzige Datum im gesamten Text und hat es immer die Form TT.MM.JJJJ ?
    - wenn es mehrere Datumswerte gibt: Ist der Text vor dem gesuchten Datum immer identisch?

  • wenn die mail immer gleich aussieht, kannst du theoretisch auch "StringBetween()" probieren (#include <string.au3>).

    wäre es mein problem, wäre die lösung mit sicherheit schnell gefunden - da wüsste ich dann allerdings, wie die komplette mail aussieht :)

    Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.

  • Sorry wenn ich Informationen "unterschlagen" habe - ich hatte gedacht, dass diese Infos ausreichend sind. Da sieht man, was man mit seinem Halbwissen anstellen kann :):):)

    Also...

    @BugFix in der Mail selbst sind 2 Daten (Datum's?) drin. Beide brauche ich... will sie in Variablen speichern damit ich mit ihnen weiter arbeiten kann.

    Die Mail sieht so aus:

    Ich hab die Mail mit allen internen Daten natürlich unkenntlich gemacht, aber man sieht worauf ich hinaus will. In diesem Beispiel ist in Zeile 8 und in Zeile 23 ein Datum - beide brauche in einer eigenen Variable. Das das Datum jeweils in Zeile 8 und 23 steht, variert jedesmal da inhalte in der Mail hinzukommen oder halt entfernt sind.

    LG

    Mein AutoIT Smartphone GUI >>hier<<

    Der Mensch ist das einzige Tier, dass arbeiten muss.

    • Offizieller Beitrag

    Dann arbeitet man mit regulären Ausdrücken:


    Edit:
    Als Flag für StringRegExp kann man hier auch 1 verwenden, aber bei dieser Abfrage ist das Rückgabe-Array für beide Flags identisch und somit ist es unerheblich, welches Flag genutzt wird.

  • Ich hätts so gemacht, wie immer:
    (Text im Clipboard!)

    RegEx is immer sone Sache :D

    Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.

    Einmal editiert, zuletzt von x0r (27. August 2015 um 12:54)

  • Ahjeiei... es funktioniert so... diese ganzen String-Befehle sind mir (wenn sie in den RegExp-Bereich gehen) einfach ne Nummer zu hoch :)

    Aber vielen Dank - so hab ich die Daten in einer Variable und kann damit weiterarbeiten. Wunderbar - vielen Dank für Eure Zeit :klatschen:

    Mein AutoIT Smartphone GUI >>hier<<

    Der Mensch ist das einzige Tier, dass arbeiten muss.