_FileSearchAndReplace() - Suchen und Ersetzen in Datei

  • Moin,

    ich hab zwar eine Funktion die von gtaspider gepostet wurde gefunden, aber die war mir zu komplex ;) .
    Hier mal meine Lösung :

    [autoit]

    Func _FileSearchAndReplace( $sFile, $uSearch, $uReplace, $bCaseSensitive = 0 )
    Local $bResult = True
    $hFile = FileOpen( $sFile, 0 )
    If $hFile > 0 Then
    $sContent = FileRead( $hFile )
    FileClose( $hFile )
    If IsArray( $uSearch ) And IsArray( $uReplace ) And UBound( $uSearch ) == UBound( $uReplace ) Then
    $iCount = UBound( $uSearch )
    For $i = 1 To $iCount
    $sContent = StringReplace( $sContent, $uSearch[$i], $uReplace[$i], 0, $bCaseSensitive )
    Next
    ElseIf IsString( $uSearch ) And IsString( $uReplace ) Then
    $sContent = StringReplace( $sContent, $uSearch, $uReplace, 0, $bCaseSensitive )
    Else
    $bResult = False
    EndIf
    If $bResult Then
    $hFile = FileOpen( $sFile, 2 )
    FileWrite( $hFile, $sContent )
    FileClose( $hFile )
    EndIf
    Else
    $bResult = False
    EndIf
    Return $bResult
    EndFunc

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

    ; Und hier für die Schreibfaulen ;)
    Func _FileSAR( $sFile, $uSearch, $uReplace, $bCaseSensitive = 0 )
    Return _FileSearchAndReplace( $sFile, $uSearch, $uReplace, $bCaseSensitive )
    EndFunc

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

    Func _MultiFileSearchAndReplace( $sMask, $uSearch, $uReplace, $bCaseSensitive = 0 )
    Local $bResult = True
    Local $bGoOn = True
    $hSearch = FileFindFirstFile( $sMask )
    If $hSearch > -1 Then
    $iPos = StringInStr( $sMask, "\", 0, -1 )
    If $iPos == 0 Then
    $sPath = @WorkingDir & "\"
    Else
    $sPath = StringLeft( $sMask, $iPos )
    EndIf
    While $bGoOn And $bResult
    $sFile = $sPath & FileFindNextFile( $hSearch )
    If @error <> 1
    If StringInStr( FileGetAttrib( $sFile ), "D" ) == 0 Then
    $bResult = _FileSearchAndReplace( $sFile, $uSearch, $uReplace, $bCaseSensitive )
    EndIf
    Else
    $bGoOn = False
    EndIf
    Wend
    Else
    $bResult = False
    EndIf
    Return $bResult
    EndFunc

    [/autoit]

    Funktioniert mit Strings oder Arrays als Parameter für Suchen und Ersetzen.

    Update :

    Rückgabewert ist jetzt 'True' für hat geklappt und 'False' für fehlgeschlagen (okay ist offensichtlich ;) )
    Neue Funktion um mit Dateimaske zu arbeiten (ist noch nicht rekursiv... ^^ )

    4 Mal editiert, zuletzt von JanSchmidt (25. Februar 2008 um 15:30)