_FileWriteToLine und Dateien im Unix Format.

  • Hallo zusammen,

    ich musste gerade feststellen, das _FileWriteToLine nicht in jede Datei schreiben kann.

    Ich habe eine Datei namens "Database.properties". Diese Datei beinhaltet bestimmt Zeilen, die ich ersetzen möchte.
    Das Problem ist, das diese Datei in Unix Format abgespeichert ist, z.B. werden die Zeilen mit LF umgebrochen.

    Wenn ich mit _FileWriteToLine eine Zeile größer 1 ersetzen möchte, kommt die Meldung, dass die Datei weniger Zeilen hat als $iLine.
    Wenn ich die Datei in Windows Format umkonvertiere funktioniert es.
    Wenn ich $iLine = 1 angebe, wird der gesamte Inhalt der Datei gelöscht und nur die Zeile 1 wird hineingeschrieben.

    _FileReadToArray funktioniert Einwand frei. Ich kann alle Zeilen in ein Array auslesen.

    Hoffe jemand kann mir helfen.

    Danke und Gruß
    Herra

  • Einfach die Func. ändern, z.B. Wählbarer separator

    Spoiler anzeigen
    [autoit]

    ; Author ........: cdkid
    Func _FileWriteToLine($sFile, $iLine, $sText, $fOverWrite = 0,$LineSeparator = @CRLF)
    If $iLine <= 0 Then Return SetError(4, 0, 0)
    If Not IsString($sText) Then Return SetError(6, 0, 0)
    If $fOverWrite <> 0 And $fOverWrite <> 1 Then Return SetError(5, 0, 0)
    If Not FileExists($sFile) Then Return SetError(2, 0, 0)

    Local $filtxt = FileRead($sFile, FileGetSize($sFile))
    $filtxt = StringSplit($filtxt, $LineSeparator, 1)
    If UBound($filtxt, 1) < $iLine Then Return SetError(1, 0, 0)
    Local $fil = FileOpen($sFile, 2)
    If $fil = -1 Then Return SetError(3, 0, 0)
    For $i = 1 To UBound($filtxt) - 1
    If $i = $iLine Then
    If $fOverWrite = 1 Then
    If $sText <> '' Then
    FileWrite($fil, $sText & $LineSeparator)
    Else
    FileWrite($fil, $sText)
    EndIf
    EndIf
    If $fOverWrite = 0 Then
    FileWrite($fil, $sText & $LineSeparator)
    FileWrite($fil, $filtxt[$i] & $LineSeparator)
    EndIf
    ElseIf $i < UBound($filtxt, 1) - 1 Then
    FileWrite($fil, $filtxt[$i] & $LineSeparator)
    ElseIf $i = UBound($filtxt, 1) - 1 Then
    FileWrite($fil, $filtxt[$i])
    EndIf
    Next
    FileClose($fil)
    Return 1
    EndFunc ;==>_FileWriteToLine

    [/autoit]