Bitte um Hilfe bei StringRegExpReplace

  • Hallo,

    ich kapier es leider nicht: Im HTML Sourcecode schaut es so aus:

    üüü232325)

    Also 3x der Buchstabe ü, eine sechsstellige Zahl, die in jeder Zeile anders ist, und dann die geschlossene runde Klammer. Diese Kombination gibt es mehrfach im HTML Dokument. Ich hätte das gerne ersetzt, sodaß es im HTML Code dann so aussieht:

    <td>232325</td>

    Also soll die Zahl bleiben und in eine Zelle einer Tabelle gesetzt werden. Wer erleuchtet mich bitte?

  • Hi,

    keine StringRegExpReplace Lösung:

    1) Lade Deinen HTML Code in einen String
    $string = FileRead (@ScriptDir & "\test.html")
    StringReplace ($string, "üüü", "<td>")
    StringReplace ($string, ")", "</td>")

    2) Schreib zurück
    $file = FileOpen (@ScriptDir & "\test.html", 2)
    FileWrite ($file, $string)
    FileClose ($file)

    ;-))
    Stefan

    P.S: Ich bin mir sicher, dass noch ein StringRegExpReplace Ansatz kommen wird

  • Danke, das hat schonmal geholfen.

    Jetzt fehlt mir noch die Möglichkeit, so etwas zu ersetzen:

    Spoiler anzeigen

    <a href="" onclick="document.searchForm.SectionDefInternalNames.value='FaqSection,Attachments,SurveySection,RightNowDetails';_popupPrepareFormForSubmit('searchForm');documentsDetailsPrepareDocEdition('searchForm','0','DT_Troubleshooting_FAQLoc');return mytasksExecuteAction('searchForm','root', 254541,113, 'No',false,false,2,'/crm/publication/includes/editor.jsp','_self','none');">


    Diese Zeile kommt mehrfach vor und die beiden Zahlen 254541 und 113 sind auch jedesmal unterschiedlich. Die sind wohl mit \d{6} und \d{3} auffindbar. Mir machen die Hochkommas und Klammern Sorgen. Mit dem vorangestellten Backslash ist das nicht möglich.

    So funktioniert es jedenfalls nicht:

    [autoit]

    $content = StringReplace($content, '<a href="" onclick="document.searchForm.SectionDefInternalNames.value=\'FaqSection', 'neuertext')

    [/autoit]


    So funktioniert es:

    [autoit]

    $content = StringReplace($content, '<a href="" onclick="document.searchForm.SectionDefInternalNames.value=', 'neuertext')

    [/autoit]


    Aber das hilft mir nicht; ich will ja die ganze Zeile ersetzen.


    Danke!

    Einmal editiert, zuletzt von 32vroni (11. Februar 2010 um 21:59)

    • Offizieller Beitrag

    Ich weiß jetzt nicht, welcher Teil zum erkennen (match) relevant ist, deshalb habe ich mal alles genommen:

    [autoit]


    $string = FileRead('test.txt')
    $string = StringRegExpReplace($string, '<a href="" onclick="document.searchForm.SectionDefInternalNames.value=\x27FaqSection,Attachments,SurveySection,RightNowDetails\x27;_popupPrepareFormForSubmit\(\x27searchForm\x27\);documentsDetailsPrepareDocEdition\(\x27searchForm\x27,\x270\x27,\x27DT_Troubleshooting_FAQLoc\x27\);return mytasksExecuteAction\(\x27searchForm\x27,\x27root\x27, (\d{6}),(\d{3}), \x27No\x27,false,false,2,\x27\/crm\/publication\/includes\/editor.jsp\x27,\x27_self\x27,\x27none\x27\);">', '<td>$1, $2</td>')
    MsgBox(0,0,$string)

    [/autoit]

    ich vermute aber mal, dass nach dem "<a href...>" auch noch ein Text und ein "</a>" folgt, die dann wohl auch entfernt werden müssen. Deshalb hier noch eine entsprechend erweiterte Version:

    [autoit]


    $string = FileRead('test.txt')
    $string = StringRegExpReplace($string, '<a href="" onclick="document.searchForm.SectionDefInternalNames.value=\x27FaqSection,Attachments,SurveySection,RightNowDetails\x27;_popupPrepareFormForSubmit\(\x27searchForm\x27\);documentsDetailsPrepareDocEdition\(\x27searchForm\x27,\x270\x27,\x27DT_Troubleshooting_FAQLoc\x27\);return mytasksExecuteAction\(\x27searchForm\x27,\x27root\x27, (\d{6}),(\d{3}), \x27No\x27,false,false,2,\x27\/crm\/publication\/includes\/editor.jsp\x27,\x27_self\x27,\x27none\x27\);">.+?</a>', '<td>$1, $2</td>')
    MsgBox(0,0,$string)

    [/autoit]

    Edit:  Schnitzel, das ist echt schon erstaunlich! Immer zur gleichen Zeit! :D

  • sowas in der art müsste klappen:

    [autoit]

    StringRegExpReplace($text,'<a href="" onclick.*;">', '')

    [/autoit]

    du musst dir halt ein eindeutigen anfang und ende suchen
    als anfang hab ich jetz '<a href="" onclick' verwendet
    dazwischen darf .* stehen also jedes zeichen egal wie oft
    und am ende muss: ;"> stehen

    wie gut das funktioniert kann ich leider nich sagen. teste am besten mal bisschen ;)
    bin leider noch nich so der regexp profi

    Edit: man oscar immer zur gleichen minute, lass dir mal 2 minuten zeit :D

  • Oha, seid Ihr schnell. Leider ist es das nicht. Wahrscheinlich habe ich noch einen Fehler irgendwo. Hier mal das ganze Skript:

    [autoit]

    #Include <FF.au3>
    #include <GuiConstantsEx.au3>
    #include <ClipBoard.au3>
    #include <WindowsConstants.au3>
    #Include <String.au3>
    #include <Array.au3>

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

    Opt("WinTitleMatchMode", 2)
    Dim $schleife
    Dim $fil
    Dim $infile
    Dim $outfile
    Dim $content
    Dim $Zahl

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

    For $schleife = 1 to 1000
    $fil = "CCIL-" & $schleife&".html"
    $fileopen = FileOpen($fil, 0)
    $outfile = "CCIL-table-" & $schleife&".html"
    $infile = FileRead($fil)
    If $fileopen = -1 Then
    MsgBox(0, "Error", "Unable to open file.")
    Exit
    EndIf

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

    Local $contentarray = _StringBetween($infile,'<div class="cciltabpubdocdis">', '</tbody></table>')
    $content = _ArrayToString($contentarray)

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

    $content = StringReplace($content, '<img src="/comp/crm/themes/concrete/jspimages/publication/sectionnotifgreenbullet.gif" alt="">', "äg")
    $content = StringReplace($content, '<img src="/comp/crm/themes/concrete/jspimages/publication/sectionnotifredbullet.gif" alt="">', "är")
    $content = StringRegExpReplace($content, '<input name="DocIds" value="\d{6}" type="checkbox">', '')
    $content = StringReplace($content, "&nbsp;&nbsp;(", "üü")
    $content = StringRegExpReplace($content, 'üü(\d{6})\)', '<td>$1</td>')
    $content = StringReplace($content, '<img src="/comp/ccil/themes/concrete/jspimages/publication/docedited.gif" alt="" title="', "")

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

    $content = StringReplace($content, '<a href="" onclick="document.searchForm.SectionDefInternalNames.value=\x27FaqSection,Attachments,SurveySection,RightNowDetails\x27;_popupPrepareFormForSubmit\(\x27searchForm\x27\);documentsDetailsPrepareDocEdition\(\x27searchForm\x27,\x270\x27,\x27DT_Troubleshooting_FAQLoc\x27\);return mytasksExecuteAction\(\x27searchForm\x27,\x27root\x27, (\d{6}),(\d{3}), \x27No\x27,false,false,2,\x27\/crm\/publication\/includes\/editor.jsp\x27,\x27_self\x27,\x27none\x27\);">', 'ÄÖÄ')

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

    FileWrite($outfile, $content& @CRLF &"</tbody></table>")
    FileClose($outfile)

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

    Next

    [/autoit]

    Die fragliche html Zeile sieht so aus:

    Spoiler anzeigen

    <a href="" onclick="document.searchForm.SectionDefInternalNames.value='FaqSection,Attachments,SurveySection,RightNowDetails';_popupPrepareFormForSubmit('searchForm');documentsDetailsPrepareDocEdition('searchForm','0','DT_Troubleshooting_FAQLoc');return mytasksExecuteAction('searchForm','root', 252891,113, 'No',false,false,2,'/crm/publication/includes/editor.jsp','_self','none');">


    Wenn ich es so mache:

    [autoit]

    $content = StringReplace($content, '<a href="" onclick="document.searchForm.SectionDefInternalNames.value=', 'ÄÖÄ')

    [/autoit]


    wird der Suchbegriff schon ersetzt. Kommt noch das \x27 hinzu, wird die Zeile unverändert übernommen.

    Muß ich da noch Optionen einstellen?

    Danke!

    Einmal editiert, zuletzt von 32vroni (11. Februar 2010 um 22:02)

    • Offizieller Beitrag

    Bitte benutze für AutoIt-Scripte die Spoiler- und AutoIt-Tags, dann kann man den Quelltext hier einfacher lesen.

    Ich denke der Fehler liegt darin, dass Du StringReplace und nicht StringReqExpReplace benutzt (wie in meinem Beispiel).
    Die "\x27" für die einfachen Anführungszeichen funktionieren nur bei RegExp nicht beim normalen Replace.
    Generell wäre es für uns einfacher, wenn Du eine der HTML-Dateien posten würdest (Anhang) und dann dazuschreibst, was davon ersetzt werden soll.
    So könnte man das leichter testen.

  • Die volle html Seite kann ich nicht hier darstellen; da wäre der Chef dagegen.

    Ein Abschnitt wäre dieser hier:
    Die einzelnen Dokumente haben eine Tabelle mit meist 40 Zeilen. In jeder Zeile sind zwei Zellen. In der ersten Zelle sind maximal vier Links, in der zweiten Zelle ist immer ein Link. In der ersten Zelle kann es auch sein, daß nur ein, zwei oder drei Links sind. Bei den Links ist immer ein kleines Bild.

    Was ich haben will ist folgendes:
    Es sollen insgesamt 5 Zellen werden. In jeder Zelle ist dann nur im Klartext der Name des Bildtitels enthalten. Also in der ersten Zelle in diesem Fall "Modify", in der zweiten Zelle "Publish as Draft External", in der dritten "Modify Document References", inder vierten "Add Note" und in der letzten "Document information".

    Zunächst war daher mein Gedanke, die Links erstmal durch <td>Bildertitel</td> zu ersetzen.


    Spoiler anzeigen

    <td class="cciltabodd" align="left">


    <a href="" onclick="document.searchForm.SectionDefInternalNames.value='FaqSection,Attachments,SurveySection,RightNowDetails';_popupPrepareFormForSubmit('searchForm');documentsDetailsPrepareDocEdition('searchForm','0','DT_Error_Messages_FAQLoc');return mytasksExecuteAction('searchForm','root', 212123,113, 'No',false,false,2,'/crm/publication/includes/editor.jsp','_self','none');">

    <img src="/comp/ccil/themes/concrete/jspimages/publication/docmodify.gif" alt="" title="Modify">
    </a>


    <a href="" onclick="document.searchForm.SectionDefInternalNames.value='FaqSection,Attachments,SurveySection,RightNowDetails';_popupPrepareFormForSubmit('searchForm');documentsDetailsPrepareDocEdition('searchForm','0','DT_Error_Messages_FAQLoc');return mytasksExecuteAction('searchForm','root', 262354,115, 'No',false,false,0,'','_self','com.instranet.services.loadcomparisonmatrix.APICmdWorkflowActionAndUpdateMatrix');">

    <img src="/comp/ccil/themes/concrete/jspimages/publication/docpublishnewversion.gif" alt="" title="Publish as Draft External">
    </a>


    <a href="" onclick="document.searchForm.SectionDefInternalNames.value='FaqSection,Attachments,SurveySection,RightNowDetails';_popupPrepareFormForSubmit('searchForm');;return mytasksExecuteAction('searchForm','root', 678900,111, 'No',false,false,2,'/il/publication/includes/editordocref.jsp','_self','none');">

    <img src="/comp/ccil/themes/concrete/jspimages/publication/docrefedit.gif" alt="" title="Modify Document References">
    </a>


    <a href="" onclick="document.searchForm.SectionDefInternalNames.value='FaqSection,Attachments,SurveySection,RightNowDetails';documentsAddNote('searchForm','');;return mytasksExecuteAction('searchForm','root', 889910,108, 'No',false,false,2,'/il/publication/popups/noteeditor.jsp','NoteEditor','none');">

    <img src="/comp/ccil/themes/concrete/jspimages/publication/addnote.gif" alt="" title="Add Note">
    </a>


    </td>
    <td class="ddsdoc cciltabodd" align="center">

    <a href="" onclick='return documentsSelectViewDetails("searchForm", "3","searchFormsearchPageFilterViewType","669780","DocId","searchFormsearchPageFilterListSelectorPage");'>
    <img src="/comp/ccil/themes/concrete/jspimages/publication/docdetails.gif" alt="" title="Document information">
    </a>

    </td>

    2 Mal editiert, zuletzt von 32vroni (11. Februar 2010 um 22:04)