String suchen verändern

  • Hi

    ich möchte ein String nach ein Wort suchen und die als Variable speichern. Die stringsenthalten keine Leerzeichen. Z.B: $result = "hierstehtirgendwas?undhierauchnochmalwas".
    Jetzt das "?" suchen und dann 4 Zeichen nach rechts(also h) und da ist ein wort die 4 zeichen lang sind und das soll es als Variable gespeichert werden.
    Achtung! Wenn Gesuchtstrings mehrmals in einem Wort enthalten sind.. soll es in verschiedene Variable gespeichert werden. Das muss ich wohl dann mit array machen oder?

    Ich würd gern selbst versuchen, aber mir fehlt eine Funktion wie man ein String raussuchen kann ^^

    mfg MaZy

    GELÖST!

    [autoit]

    #include <Array.au3>
    $sText = "hierstehtirgendwas?undhierauchnochmalwas?123blaeortrijtij?123Jojomennfj"
    $aResult = StringRegExp($sText, '\?.{3}(.{4})', 3)
    #cs
    \? = das Fragezeichen selbst
    .{3} = drei beliebige Zeichen (werden nicht ins Array übernommen)
    (.{4}) = vier beliebige Zeichen, in Klammern gesetzt heißt: diese werden ins Array übernommen
    #ce
    _ArrayDisplay($aResult)

    [/autoit]

    Und noch was von mir..

    Spoiler anzeigen
    [autoit]

    $test = "hallo?nochmal"

    [/autoit] [autoit][/autoit] [autoit]

    Func searchstring($string, $search)
    ;Gesamtzeichen
    $sl = StringLen($string)
    ;Zeichen der gesuchten String
    $sis = StringInStr($string, $search)
    ;Zeichen nach der gesuchten String
    $dword = $sl - $sis
    ;Zeichenbeginn vor gesuchten String
    $fl = "1"
    $aword = $sis - $fl
    ;Alles davor löschen
    $string = StringTrimLeft($string, $aword)
    ;Alles danach löschen
    $string = StringTrimRight($string, $dword)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    searchstring($test, "?")

    [/autoit]

    4 Mal editiert, zuletzt von MaZy (25. Februar 2009 um 15:20)

  • Was du suchst sind die String-Funktionen

    [autoit]


    StringReplace
    StringLeft
    StringRight
    StringTrimLeft
    StringTrimRight

    [/autoit]


    usw.
    Schau am Besten in die Hilfe

    Padmak

  • und weiter geht's dann mit

    [autoit]


    StringInStr
    StringRegExp

    [/autoit]

    usw

    wie Padmak schon geschrieben hat, einfach mal alles angucken was mit "string" anfängt :D

    Zitat

    Laughing Man

    "I thought, what I'd do was, I'd pretend I was one of those deaf-mutes"

  • klar doch.. ich bin nun viel weiter

    [autoit]

    $result = "hierstehtirgendwas?undhierauchnochmalwas"
    $sword = "?"

    [/autoit][autoit][/autoit][autoit]

    ;Gesamtzeichen
    $sl = StringLen($result)
    msgbox(0,"Gesamtzeichen",$sl)

    [/autoit][autoit][/autoit][autoit]

    ;Zeichen der gesuchten String
    $sis = StringInStr($result, $sword)
    msgbox(0,"Zeichen der gesuchten String",$sis)

    [/autoit][autoit][/autoit][autoit]

    ;Zeichen vor der gesuchten String
    $dword = $sl - $sis
    msgbox(0,"Zeichen vor der gesuchten String",$dword)

    [/autoit][autoit][/autoit][autoit]

    ;Zeichenbeginn nach gesuchten String
    $fl = "1"
    $aword = $sis - $fl
    msgbox(0,"Zeichen nach der gesuchten String",$aword)

    [/autoit][autoit][/autoit][autoit][/autoit]

    Jetzt kommt das mit schneiden.. aber ne frage.. was wenn da mehrer gesuchte Strings enthalten sind?

    EDIT: Ubs.. da hab ich ein paar fehler :S
    EDIT2: Nun sind sie aber richtig :P

    Einmal editiert, zuletzt von MaZy (25. Februar 2009 um 14:25)

  • Spoiler anzeigen
    [autoit]


    $text = "hiersteh?tirgendwas?undh?ierauchno?chmalwas"

    [/autoit] [autoit][/autoit] [autoit]

    $string = StringSplit($text, "?")

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To $string[0]
    MsgBox(0, "Einzelne Abschnitte", $string[$i])
    Next

    [/autoit] [autoit][/autoit] [autoit]

    $result = ""

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To $string[0]
    $result &= $string[$i] & @CRLF
    Next

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0, "Mit Leerzeichen", $result)

    [/autoit] [autoit][/autoit] [autoit]

    $string = StringReplace($text, "?", "")
    MsgBox(0, "Ohne ?", $string)

    [/autoit]


    Für mehrere gibt z.B. StringSplit ein Array zurück, in $array[0] ist die Anzahl gespeichert, in $array[1] der erste teil usw.
    Steht aber auch in der Hilfe :P

    Padmak

  • ihr seid lustig :P
    tue ich schon lange... ich hab immernoch kein logik.. fürs weg gefunden

    ahh StringInStr bringt mich schonmal weiter :P


    also zur "Logik", ein anderer Weg (nicht die prof. Lösung aber einfacher umzusetzten ) wäre :

    - While - Wend - Schleife, bis mit StringInStr nichts mehr gefunden wird [While StringInStr(...)]
    - mit StringInStr Position des Suchstrings auslesen
    - $zaehler += 1
    a) die gesuchten 4 Zeichen mit StringMid auslesen und in Variable speichern -->> Variable als Array[$zaehler]
    b) linken Teil inklusiv "?" und 4 Zeichen und den gesuchten 4 Zeichen mit StringTrimRight von Basisstr. abschneiden -->> neuer Basisstr.
    - Wend

  • $text = "hiersteh?tirgendwas?undh?ierauchno?chmalwas" $string = StringSplit($text, "?") For $i = 1 To $string[0] MsgBox(0, "Einzelne Abschnitte", $string[$i]) Next $result = "" For $i = 1 To $string[0] $result &= $string[$i] & @CRLF Next MsgBox(0, "Mit Leerzeichen", $result) $string = StringReplace($text, "?", "") MsgBox(0, "Ohne ?", $string)

    Aber ich will ja die gesuchte String als variable haben. Das wär "?"

    BTW bin fertig

    [autoit]

    $test = "hallo?nochmal"

    [/autoit][autoit][/autoit][autoit]

    Func searchstring($string, $search)
    ;Gesamtzeichen
    $sl = StringLen($string)
    ;Zeichen der gesuchten String
    $sis = StringInStr($string, $search)
    ;Zeichen nach der gesuchten String
    $dword = $sl - $sis
    ;Zeichenbeginn vor gesuchten String
    $fl = "1"
    $aword = $sis - $fl
    ;Alles davor löschen
    $string = StringTrimLeft($string, $aword)
    ;Alles danach löschen
    $string = StringTrimRight($string, $dword)
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    searchstring($test, "?")

    [/autoit]
    • Offizieller Beitrag

    Das ist doch aber ein klassisches Beispiel für StringRegExp:

    [autoit]


    #include <Array.au3>
    $sText = "hierstehtirgendwas?undhierauchnochmalwas?123blaeortrijtij?123Jojomennfj"
    $aResult = StringRegExp($sText, '\?.{3}(.{4})', 3)
    #cs
    \? = das Fragezeichen selbst
    .{3} = drei beliebige Zeichen (werden nicht ins Array übernommen)
    (.{4}) = vier beliebige Zeichen, in Klammern gesetzt heißt: diese werden ins Array übernommen
    #ce
    _ArrayDisplay($aResult)

    [/autoit]
  • Ehm geht auch mehrere Zeichen.. ich hab mit \was? getestet.. da kommt mal s? in array raus

    Einmal editiert, zuletzt von MaZy (25. Februar 2009 um 14:55)

  • wenn keine Fragezeichen nach dem Fragezeichen auftauchen dürfen:

    [autoit]

    #include<Array.au3>
    $string = "hierstehtirgendwas?undhierauchn?o?hmalwas"

    [/autoit][autoit][/autoit][autoit]

    ; in den 7 Zeichen nach ? dürfen keine ? vorkommen:
    $ergebnis = StringRegExp($string,"\?[^?]{3}([^?]{4})",3)

    [/autoit][autoit][/autoit][autoit]

    If @error Then
    MsgBox(0, '', "Keine Treffer")
    Else
    _ArrayDisplay($ergebnis)
    EndIf

    [/autoit]
  • Wie bitte?
    Gibt's die Frage auch auf deutsch? ;)

    Entschuldigung^^

    Ich wollte nur wissen ob es möglich wäre Wörter zu verwenden die halt mehr als ein Zeichen sind wie "hier".
    Aber ich habe verstanden. Mann muss nur \ wegnehmen ^^
    Thx.

    Also jetzt ist aufjedenfall gelöst.. hab mehrere sachen getestet das funktioniert super.


    Ich hab ne frage.
    1. Ist meine Function jetzt umsonst was ich da gebaut habe? Gibs schon ein Befehl um ein String herauszufischen?
    2. Wie kann ich in func die vari $string so machen das man sie außerhalb function auch bearbeiten kann?
    Ich hab mit return $string versucht.. ging net :S

  • Der \ ist da weil das Fragezeichen eine besondere Bedeutung hat. Um das Fragezeichen als normales Zeichen zu verwenden, musst du einen Backslash davorstellen: \?
    Eine grobe Übersicht gibt es hier: http://de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck

    Zu 1: Je nach Aufgabenstellung kann man viele Stringbearbeitungen auch mit Regulären Ausdrücken machen ;)
    Zu 2: Was verstehst du unter ausßerhalb bearbeiten?
    Return funktioniert so: in der Funktion machst du Return $variable
    das wird der Rückgabewert der Funktion, den du so bekommst:
    $Rueckgabe = _Funktion(...)

  • ...oder du definierst die Variable $string global