String löschen

  • Hallo zusammen,

    ich kämpfe heute schon seit Stunden mit einem String Problem:
    Sieht so aus:

    [autoit]


    <select style="width: 128px;" id="HundeForm" name="Collies">

    [/autoit]


    Es sollte so aussehen:

    [autoit]


    id="HundeForm" name="Collies"
    D.h. der vordere Teil, den ich ja mit StringBetween ermitteln kann
    sollte gelöscht werden.

    [/autoit]


    Konnte das mit StringReplace und StringBetween nicht lösen!

    Gibt es da noch einen anderen Befehl?


    huh...
    Ilse ;)

    Einmal editiert, zuletzt von Ilse (29. April 2011 um 08:51)

  • [autoit]


    #Include <String.au3>
    #Include <array.au3>

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

    $string='<select style="width: 128px;" id="HundeForm" name="Collies">'

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

    $aString = _StringBetween($string,';" ','>')
    _ArrayDisplay($aString)

    [/autoit]
  • Hallo,

    ich habe mal einen Beispielcode gemacht.
    Die Zwischenablage im Code einfach kopieren...)

    [autoit]


    #Include <String.au3>
    #Include <array.au3>

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

    #cs Diese Zwischenablage bitte kopieren...
    <select style="width: 128px;" id="HundeForm" name="Collies">'
    <option value="375">Dackel</option>
    <option value="800">Collie</option>
    <option value="900">Schäferhund</option>
    #ce
    Local $ini = '[Allgemein]' & @CRLF
    $string = ClipGet()

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

    $myString = _StringBetween($string, '="', '</')

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

    For $i = 0 To UBound($myString) -1
    $a2 = StringSplit($myString[$i],'">', 1)
    $ini &= $a2[2] & '=' & $a2[1] & @CRLF
    Next

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

    _ArrayDisplay($a2)

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

    MsgBox(0, '', $ini)

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

    FileWrite(@DesktopDir & '\meini_ini.ini', $ini); ini Datei wird auf Desktop erstellt ;)

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

    Wie soll ich's erklären....hm
    Also, wenn die Zwischenablage den StringBetween Befehl
    enthält (das was ich löschen möchte..)
    dann ersetze diese Zeile, u.s.w.

    So sollte das Ergebnis aussehen:

    [autoit]


    id="HundeForm"
    name="Collies"
    Dackel="375"
    Collie="800"
    Schäferhund="900"

    [/autoit]

    D.h. Im Loop muß ich nochmals abfragen
    und da bleibe ich hängen!

    Liebe Grüße
    Ilse ;)

  • Warum arbeitest du nun eigentlich mit der Zwischenablage? Hast du nicht schon genügend Beispiele bekommen wie man HTML Quellcode ausliest, als String oder auch Array speichert und anschliessend weiterverarbeitet?
    Langsam sollten dir doch Funktionen wie _Arraysearch und _ArrayFindAll geläufig sein um die passenden Codezeilen zufinden und dann per Stringfunktionen zu bearbeiten. Da sich die Zeilen voneinander Unterscheiden kannst du jedenfalls nicht für alle Zeilen das selbe regexp Muster oder auch stringbetween mit den gleichen Suchstrings verwenden wie bei der ersten Zeile. Daher bietet sich ein Array an in dem du dann eben Zeile 1 so bearbeitest wie oben gepostet und alle weiteren dann eben nach einem anderen Muster.

  • @ Misterspeed,

    Zitat

    Warum arbeitest du nun eigentlich mit der Zwischenablage?

    klar, das war doch nur ein Beispiel, damit man das leicher nachvollziehen kann!
    _Arraysearch , _ArrayFindAll, Stringfunktionen...
    Ich probier nochmals alles durch.
    Ich sagte ja mit StringReplace und StringBetween hat's nicht geklappt.
    Mit _Arraysearch , _ArrayFindAll hab ich's noch nicht probiert.

    Melde mich wieder...
    Merci
    ;) Ilse

    • Offizieller Beitrag

    Das ginge auch so:

    [autoit]


    $string = '<select style="width: 128px;" id="HundeForm" name="Collies">' & @CR & '<option value="375">Dackel</option>' & @CR & '<option value="800">Collie</option>' & @CR & '<option value="900">Schäferhund</option>'

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

    $out = StringRegExpReplace($string, '<.+(id=".+?") (name=".+?").+', '$1' & @CR & '$2')
    $opt = StringRegExp($string, '<option value="(.+?)">(.+?)</option>', 3)
    If IsArray($opt) Then
    For $i = 0 To UBound($opt) - 1 Step 2
    $out &= @CR & $opt[$i + 1] & '=' & $opt[$i]
    Next
    EndIf
    MsgBox(0, '', $out)

    [/autoit]
  • Hallo Oscar,

    das funktioniert prima. Dank Dir. ;)
    Ich bin immer aber noch mit ArraySearch & Co am probieren.
    Das bringt mich mal wieder total von der Rolle weil es einfach nicht
    das tut was ich will! ?(
    Mit RegEx brauch's wohl noch etwas Zeit.

    Liebe Grüße
    Ilse ;)