Homepage-Fehler ausbessern

  • Hallo allerseits!

    Ich habe hier eine ältere HP liegen, in der noch zu jedem a-Tag ein alt-Attribut gehörte. Jetzt möchte ich das Verzeichnis durchforsten und alle alt-Attribute entfernen (nicht mehr Standardkonform). So, dachte ich mir. Einfach 'alt="*"' durch "" ersetzen, aber dann liegen Bilder ja blank. Durch '<a * alt="*">' zu '<a *>' kommt man (logischerweise) auch nicht weit. Hat jemand einen RegExp-Pattern parat?

    Einen schönen Tag noch!

    Matthias

    Einmal editiert, zuletzt von MatthiasG. (6. Dezember 2009 um 13:23)

  • Super, danke!

    Es funktioniert.

    Nun habe ich folgendes Problem: Die Seite enthält Unterverzeichnise. Heißt mit FileFindFirstFile(*.html) und FileFindNextFile komme ich nicht weit.
    Es gab doch mal eine Funktion, die einen kompletten Verzeichnisbaum einlesen konnte, wie hieß die nochmal?

    Danke nochmal und schonmal im Voraus!

    Einen schönen Sonntag noch,
    Matthias

    • Offizieller Beitrag

    Es gibt mehrere Funktionen, die Dateien rekursiv einlesen können. Hier ist meine:

    Spoiler anzeigen
    [autoit]


    #include <Array.au3> ; nur für die Beispiele erforderlich

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

    ; Beispiele
    $iTimer = TimerInit()
    $a = _RecursiveFileListToArray(@UserProfileDir, '', 1)
    ConsoleWrite(Round(TimerDiff($iTimer)/1000, 4) & ' sek.' & @CRLF)
    _ArrayDisplay($a)

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

    ;~ $timer = TimerInit()
    ;~ $aReturn = _RecursiveFileListToArray('C:', '\.exe\z', 1) ; Alle Dateien mit der Erweiterung ".exe" (auf C:)
    ;~ ConsoleWrite(@error & @CRLF)
    ;~ ConsoleWrite(Round(TimerDiff($timer)/1000, 3) & ' sek.' & @CRLF)
    ;~ _ArrayDisplay($aReturn, 'Alle Dateien mit der Erweiterung ".exe"')

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

    ;~ $timer = TimerInit()
    ;~ $aReturn = _RecursiveFileListToArray('C:', '\.au3\z', 1) ; Alle Dateien mit der Erweiterung ".au3" (auf C:)
    ;~ ConsoleWrite(@error & @CRLF)
    ;~ ConsoleWrite(Round(TimerDiff($timer)/1000, 3) & ' sek.' & @CRLF)
    ;~ _ArrayDisplay($aReturn, 'Alle Dateien mit der Erweiterung ".au3"')

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

    ;~ $timer = TimerInit()
    ;~ $aReturn = _RecursiveFileListToArray('C:', 'autoit.*\..+\z', 1) ; Alle Dateien in denen "autoit" im Dateinamen vorkommt (auf C:)
    ;~ ConsoleWrite(@error & @CRLF)
    ;~ ConsoleWrite(Round(TimerDiff($timer)/1000, 3) & ' sek.' & @CRLF)
    ;~ _ArrayDisplay($aReturn, 'Alle Dateien in denen "autoit" im Dateinamen vorkommt')

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

    ;===============================================================================
    ; Function Name: _RecursiveFileListToArray($sPath[, $sPattern][, $iFlag][, $iFormat][, $iRecursion][, $sDelim])
    ; Description:: gibt Verzeichnisse (rekursiv) und/oder Dateien zurück, die einem RegExp-Pattern entsprechen
    ; Parameter(s): $sPath = Startverzeichnis
    ; $sPattern = ein beliebiges RexExp-Pattern für die Auswahl
    ; $iFlag = Auswahl
    ; 0 = Dateien & Verzeichnisse
    ; 1 = nur Dateien
    ; 2 = nur Verzeichnisse
    ; $iFormat = Rückgabeformat
    ; 0 = String
    ; 1 = Array mit [0] = Anzahl
    ; 2 = Nullbasiertes Array
    ; $iRecursion = Verzeichnisse rekursiv durchsuchen
    ; 0 = Nein
    ; 1 = Ja
    ; $sDelim = Trennzeichen für die String-Rückgabe
    ; Requirement(s): AutoIt 3.3.0.0
    ; Return Value(s): Array/String mit den gefundenen Dateien/Verzeichnissen
    ; Author(s): Oscar (http://www.autoit.de)
    ; Anregungen von: bernd670 (http://www.autoit.de)
    ;===============================================================================
    Func _RecursiveFileListToArray($sPath, $sPattern = '', $iFlag = 0, $iFormat = 1, $iRecursion = 1, $sDelim = @CRLF)
    Local $hSearch, $sFile, $sReturn = ''
    If StringRight($sPath, 1) <> '\' Then $sPath &= '\'
    $hSearch = FileFindFirstFile($sPath & '*.*')
    If @error Or $hSearch = -1 Then Return SetError(1, 0, $sReturn)
    While True
    $sFile = FileFindNextFile($hSearch)
    If @error Then ExitLoop
    If StringInStr(FileGetAttrib($sPath & $sFile), 'D') Then
    If StringRegExp($sPath & $sFile, $sPattern) And ($iFlag = 0 Or $iFlag = 2) Then $sReturn &= $sPath & $sFile & '\' & $sDelim
    If $iRecursion Then $sReturn &= _RecursiveFileListToArray($sPath & $sFile & '\', $sPattern, $iFlag, 0)
    ContinueLoop
    EndIf
    If StringRegExp($sFile, $sPattern) And ($iFlag = 0 Or $iFlag = 1) Then $sReturn &= $sPath & $sFile & $sDelim
    WEnd
    FileClose($hSearch)
    If $iFormat And $sReturn = '' Then Return StringSplit($sReturn, '', $iFormat)
    If $iFormat Then Return StringSplit(StringTrimRight($sReturn, StringLen($sDelim)), $sDelim, $iFormat)
    Return $sReturn
    EndFunc

    [/autoit]
  • Super, hat funktioniert.

    Für alle mit einem ähnlichem Problem, hier der Code-Fetzen:

    Spoiler anzeigen
    [autoit]

    $pfad = @DesktopDir & "\"
    $a = _RecursiveFileListToArray($pfad, '', 1)
    For $i = 1 To $a[0]
    If StringRegExp($a[$i], ".*.html") Then _removealt($a[$i])
    Next

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

    ;===============================================================================
    ; Function Name: _RecursiveFileListToArray($sPath[, $sPattern][, $iFlag][, $iFormat][, $iRecursion][, $sDelim])
    ; Description:: gibt Verzeichnisse (rekursiv) und/oder Dateien zurück, die einem RegExp-Pattern entsprechen
    ; Parameter(s): $sPath = Startverzeichnis
    ; $sPattern = ein beliebiges RexExp-Pattern für die Auswahl
    ; $iFlag = Auswahl
    ; 0 = Dateien & Verzeichnisse
    ; 1 = nur Dateien
    ; 2 = nur Verzeichnisse
    ; $iFormat = Rückgabeformat
    ; 0 = String
    ; 1 = Array mit [0] = Anzahl
    ; 2 = Nullbasiertes Array
    ; $iRecursion = Verzeichnisse rekursiv durchsuchen
    ; 0 = Nein
    ; 1 = Ja
    ; $sDelim = Trennzeichen für die String-Rückgabe
    ; Requirement(s): AutoIt 3.3.0.0
    ; Return Value(s): Array/String mit den gefundenen Dateien/Verzeichnissen
    ; Author(s): Oscar (http://www.autoit.de)
    ; Anregungen von: bernd670 (http://www.autoit.de)
    ;===============================================================================
    Func _RecursiveFileListToArray($sPath, $sPattern = '', $iFlag = 0, $iFormat = 1, $iRecursion = 1, $sDelim = @CRLF)
    Local $hSearch, $sFile, $sReturn = ''
    If StringRight($sPath, 1) <> '\' Then $sPath &= '\'
    $hSearch = FileFindFirstFile($sPath & '*.*')
    If @error Or $hSearch = -1 Then Return SetError(1, 0, $sReturn)
    While True
    $sFile = FileFindNextFile($hSearch)
    If @error Then ExitLoop
    If StringInStr(FileGetAttrib($sPath & $sFile), 'D') Then
    If StringRegExp($sPath & $sFile, $sPattern) And ($iFlag = 0 Or $iFlag = 2) Then $sReturn &= $sPath & $sFile & '\' & $sDelim
    If $iRecursion Then $sReturn &= _RecursiveFileListToArray($sPath & $sFile & '\', $sPattern, $iFlag, 0)
    ContinueLoop
    EndIf
    If StringRegExp($sFile, $sPattern) And ($iFlag = 0 Or $iFlag = 1) Then $sReturn &= $sPath & $sFile & $sDelim
    WEnd
    FileClose($hSearch)
    If $iFormat And $sReturn = '' Then Return StringSplit($sReturn, '', $iFormat)
    If $iFormat Then Return StringSplit(StringTrimRight($sReturn, StringLen($sDelim)), $sDelim, $iFormat)
    Return $sReturn
    EndFunc ;==>_RecursiveFileListToArray

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

    Func _removealt($sPath)
    $sFile = FileRead($sPath)
    $sFile = StringRegExpReplace($sFile, '(<a .*) alt=".+?"(.*?>)', '$1$2')
    $sFile = StringRegExpReplace($sFile, '(<a .*) alt=""(.*?>)', '$1$2')
    $hFile = FileOpen($sPath, 2)
    If $hFile <> -1 Then
    FileWrite($hFile, $sFile)
    FileClose($hFile)
    EndIf
    EndFunc ;==>_removealt

    [/autoit]
    • Offizieller Beitrag

    Bei meiner Funktion kannst Du direkt das RegExp-Pattern übergeben:

    Spoiler anzeigen
    [autoit]


    $pfad = @DesktopDir & "\"
    $a = _RecursiveFileListToArray($pfad, '.+\.html', 1)
    For $i = 1 To $a[0]
    _removealt($a[$i])
    Next

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

    ;===============================================================================
    ; Function Name: _RecursiveFileListToArray($sPath[, $sPattern][, $iFlag][, $iFormat][, $iRecursion][, $sDelim])
    ; Description:: gibt Verzeichnisse (rekursiv) und/oder Dateien zurück, die einem RegExp-Pattern entsprechen
    ; Parameter(s): $sPath = Startverzeichnis
    ; $sPattern = ein beliebiges RexExp-Pattern für die Auswahl
    ; $iFlag = Auswahl
    ; 0 = Dateien & Verzeichnisse
    ; 1 = nur Dateien
    ; 2 = nur Verzeichnisse
    ; $iFormat = Rückgabeformat
    ; 0 = String
    ; 1 = Array mit [0] = Anzahl
    ; 2 = Nullbasiertes Array
    ; $iRecursion = Verzeichnisse rekursiv durchsuchen
    ; 0 = Nein
    ; 1 = Ja
    ; $sDelim = Trennzeichen für die String-Rückgabe
    ; Requirement(s): AutoIt 3.3.0.0
    ; Return Value(s): Array/String mit den gefundenen Dateien/Verzeichnissen
    ; Author(s): Oscar (http://www.autoit.de)
    ; Anregungen von: bernd670 (http://www.autoit.de)
    ;===============================================================================
    Func _RecursiveFileListToArray($sPath, $sPattern = '', $iFlag = 0, $iFormat = 1, $iRecursion = 1, $sDelim = @CRLF)
    Local $hSearch, $sFile, $sReturn = ''
    If StringRight($sPath, 1) <> '\' Then $sPath &= '\'
    $hSearch = FileFindFirstFile($sPath & '*.*')
    If @error Or $hSearch = -1 Then Return SetError(1, 0, $sReturn)
    While True
    $sFile = FileFindNextFile($hSearch)
    If @error Then ExitLoop
    If StringInStr(FileGetAttrib($sPath & $sFile), 'D') Then
    If StringRegExp($sPath & $sFile, $sPattern) And ($iFlag = 0 Or $iFlag = 2) Then $sReturn &= $sPath & $sFile & '\' & $sDelim
    If $iRecursion Then $sReturn &= _RecursiveFileListToArray($sPath & $sFile & '\', $sPattern, $iFlag, 0)
    ContinueLoop
    EndIf
    If StringRegExp($sFile, $sPattern) And ($iFlag = 0 Or $iFlag = 1) Then $sReturn &= $sPath & $sFile & $sDelim
    WEnd
    FileClose($hSearch)
    If $iFormat And $sReturn = '' Then Return StringSplit($sReturn, '', $iFormat)
    If $iFormat Then Return StringSplit(StringTrimRight($sReturn, StringLen($sDelim)), $sDelim, $iFormat)
    Return $sReturn
    EndFunc ;==>_RecursiveFileListToArray

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

    Func _removealt($sPath)
    $sFile = FileRead($sPath)
    $sFile = StringRegExpReplace($sFile, '(<a .*) alt=".*?"(.*?>)', '$1$2')
    $hFile = FileOpen($sPath, 2)
    If $hFile <> -1 Then
    FileWrite($hFile, $sFile)
    FileClose($hFile)
    EndIf
    EndFunc ;==>_removealt

    [/autoit]


    Bei Deiner Funktion " _removealt" habe ich die zwei RegExp mal zusammengefasst.

  • Stimmt, hätte ich mir besser durchlesen müssen.

    Jetzt weiß ich fürs nächste Mal bescheid! Danke :thumbup: