Txt-Datei -> Zeile löschen

  • Also.. ich habe eine Txt Datei in der stehen Dateien drin.. in jeder Zeile eine.
    Ich lese die 1. Zeile aus und will diese dann löschen, damit die Schleife beim nächsten Mal wieder die 1. Zeile auslesen kann.

    Wenn ich diese mit "_ReplaceStringInFile( "Datei", "String", "Replace")" lösche, dann ist in der 1. Zeile immer ein Zeilenumbruch vorhanden, somit beginnt die Datei erst ab der 2. Zeile. :rolleyes:

    Wie kann ich eine Zeile so löschen, dass die nächste Zeile nachrückt?

    Einmal editiert, zuletzt von hundi (21. Oktober 2009 um 13:30)

  • ^^ Das erste klappt aber auch hervorragend ;) Danke sehr :)

    Zum 2. .. wenn ich einen Zeilenumbruch mit einbauen würde hätte ich doch danach noch eine leere Zeile mehr, würde also erst ab der 3. Zeile was stehen

  • ich glaube SEuBo meinte sowas in der art:

    [autoit]

    _ReplaceStringInFile($Pfad, "Vorher " & @CRLF, "")

    [/autoit]

    also den string mitsamt den zeilenumbruch zu löschen. von der logik würds passen, funktioniert aber glaub ich nicht

  • Du sollst ja nicht den Zeilenumbruch im Replace, sondern im String machen:

    [autoit]

    $string = @CRLF&"Das ist dein Text in ersten zeile mit vorangehendem Zeilenumrbuch"&@CRLF&"Das hier ist dann die zweite Zeile"
    $Replace = ""
    MsgBox(0,"",$string)
    $string = StringReplace($string, @CRLF&"Das ist dein Text in ersten zeile mit",$Replace&"Und So: ohne")
    MsgBox(0,"",$string)

    [/autoit]

    ist jetzt mit normalen stringreplace, aber es soll halt nur der veranschaulichung dienen..
    Naja Oscar hat ja eh ne passende lösung gefunden ^^
    Wenigstens lern ich dabei auch was :D

  • Ich verstehe das auch immer noch nicht ganz da durch den vorhergehenden Zeileumbruch ja die erste Zeile in die 2- Zeile gerückt wird^^

  • Hi hundi!

    Xenobologist hat da mal eine funktion gemacht

    Spoiler anzeigen
    [autoit]

    ;===============================================================================
    ;
    ; Function Name: _removeLineInFile
    ; Description:: _removeLineInFile
    ; Parameter(s):
    ; 1. $h_path = Path to file
    ; 2. $s_search = string pattern
    ; 3. Opt = 1 Delete/keep line if matches $s_search
    ; Opt = 2 Delete/keep line if starts with $s_search
    ; Opt = 3 Delete/keep line if ends with $s_search
    ; Opt = 4 Delete/keep line if contains $s_search
    ; 4. 0 = not case sensitive (default)
    ; 1 = case sensitive
    ; 5. $i_count = How many occurrances should be deleted
    ; 6. $i_TopDown = 0 (default) search --> 1-end
    ; $i_TopDown = 1 search bottumUp --> end-1
    ; 7. $h_pathNew = "" file will be overwritten
    ; $h_pathNew = ... the result is saved in new path
    ; 8. $i_inEx = 0 delete
    ; $i_inEx = 1 keep
    ;
    ; Requirement(s): #include <File.au3> and #include <Array.au3>
    ; Return Value(s): 1 success
    ; -1 file not found
    ; -2 invalid $opt
    ; -3 invalid path to write
    ; Extented = Number of lines matched
    ; Author(s): th.meger
    ;
    ;===============================================================================
    ;

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

    Func _removeLineInFile($h_path, $s_search, $i_opt = 1, $i_caseSensitive = 0, $i_count = 0, $i_topDown = 0, $h_pathNew = "", $i_inEx = 0)
    Local $i_countFound = 0
    Local $a_FileOne
    Local $a_FileTwo[1]
    Local $a_FileThree[1]

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

    If $h_pathNew = "" Then $h_pathNew = $h_path
    If $i_count = 0 Then $i_count = -1

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

    If Not _FileReadToArray($h_path, $a_FileOne) Then Return -1

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

    _ArrayDelete($a_FileOne, 0) ; do not need the number

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

    If $i_topDown = 1 Then _ArrayReverse($a_FileOne)

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

    For $i = 0 To UBound($a_FileOne) - 1
    If $i_countFound <> $i_count Then
    Switch $i_opt
    Case 1
    If $i_caseSensitive = 1 Then
    If $a_FileOne[$i] == $s_search Then
    $i_countFound += 1
    _ArrayAdd($a_FileThree, $a_FileOne[$i])
    Else
    _ArrayAdd($a_FileTwo, $a_FileOne[$i])
    EndIf
    Else
    If $a_FileOne[$i] = $s_search Then
    $i_countFound += 1
    _ArrayAdd($a_FileThree, $a_FileOne[$i])
    Else
    _ArrayAdd($a_FileTwo, $a_FileOne[$i])
    EndIf
    EndIf
    Case 2
    If $i_caseSensitive = 1 Then
    If StringLeft($a_FileOne[$i], StringLen($s_search)) == $s_search Then
    $i_countFound += 1
    _ArrayAdd($a_FileThree, $a_FileOne[$i])
    Else
    _ArrayAdd($a_FileTwo, $a_FileOne[$i])
    EndIf
    Else
    If StringLeft($a_FileOne[$i], StringLen($s_search)) = $s_search Then
    $i_countFound += 1
    _ArrayAdd($a_FileThree, $a_FileOne[$i])
    Else
    _ArrayAdd($a_FileTwo, $a_FileOne[$i])
    EndIf
    EndIf
    Case 3
    If $i_caseSensitive = 1 Then
    If StringRight($a_FileOne[$i], StringLen($s_search)) == $s_search Then
    $i_countFound += 1
    _ArrayAdd($a_FileThree, $a_FileOne[$i])
    Else
    _ArrayAdd($a_FileTwo, $a_FileOne[$i])
    EndIf
    Else
    If StringRight($a_FileOne[$i], StringLen($s_search)) = $s_search Then
    $i_countFound += 1
    _ArrayAdd($a_FileThree, $a_FileOne[$i])
    Else
    _ArrayAdd($a_FileTwo, $a_FileOne[$i])
    EndIf
    EndIf
    Case 4
    If StringInStr($a_FileOne[$i], $s_search, $i_caseSensitive) = 0 Then
    _ArrayAdd($a_FileTwo, $a_FileOne[$i])
    Else
    $i_countFound += 1
    _ArrayAdd($a_FileThree, $a_FileOne[$i])
    EndIf
    Case Else
    Return -2
    EndSwitch
    Else
    If $i_inEx = 0 Then
    _ArrayAdd($a_FileTwo, $a_FileOne[$i])
    _ArrayAdd($a_FileThree, $a_FileOne[$i])
    EndIf
    EndIf
    Next
    _ArrayDelete($a_FileTwo, 0)
    _ArrayDelete($a_FileThree, 0)

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

    If $i_topDown = 1 Then
    _ArrayReverse($a_FileTwo)
    _ArrayReverse($a_FileThree)
    EndIf

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

    If $i_inEx = 0 Then
    _FileWriteFromArray($h_pathNew, $a_FileTwo)
    Else
    _FileWriteFromArray($h_pathNew, $a_FileThree)
    EndIf
    SetExtended($i_countFound)
    If @error = 0 Then Return 1
    Return -3
    EndFunc ;==>_removeLineInFile

    [/autoit]

    Einfach den zeileninhalt entfernen dann ist die zeile herausen benötigt aber

    [autoit]

    #include <Array.au3>
    #include <File.au3>

    [/autoit]

    Ein bsp hab ich jetzt nicht parat

    gruss Simon