Leerzeilen in einer *.txt Datei löschen

  • Um es gleich vorweg zu sagen, ja es geht um ein Browsergame und nein es ist kein Bot, die Daten die mein Programm verarbeiten kommen per Copy und Past in ein Editor Fenster und werden im Script ausgewertet und aufgearbeite, es findet kein Zugriff auf den Browser oder der Seite direkt statt, es auch später nicht dazu kommen, sondern soll mir als Leiter eines "Stammes" irgendwann die Verwaltung rein local erleichtern. Ich hoffe das dieses mit den Regeln die hier herschen erlaubt ist.

    So nu zu meinem Problem, ich selbst nutze hauptsächlich den Chrome von Google wenn ich von dort die Daten rüber kopiere habe ich schön in jeder Zeile einen Wert, so weit so gut ich kann an Hand der Zeilennummer festellen welcher Wert welche Bedeutung hat. Nun habe ich das Ganze mal mit den SeaMonkey probiert und dieser Schlingel setzt zwischen manchen Werten eine Leerzeile oder eine Zeile die mit 7-10 Leerzeich gefüllt ist.

    Gibt es eine einfach Funktion die diese Leerzeilen bzw die Zeilen die nur aus Leerzeiche bestehen aus dem *.txt rauslöscht, ich will und brauch nicht unbedingt eine "Komplett Lösung" sondern nur einen "Schups" in die richtige Richtung.

    Ich habe mal das Projekt mit angehängt mit jeweils Testdaten aus dem Chrome und dem SeaMonkey, habt ein bisschen Nachsicht mit dem Quellcode, der ist bestimmt nicht ganz sauber und man kann einiges besser machen aber ich lerne halt noch. Es sind schon einige Sachen in der Gui, die noch nicht funktionieren, also bitte drüber wegsehen ;)

    Einmal editiert, zuletzt von Hüpfer (16. Juni 2009 um 06:03)

  • Hallo Hüpfer,

    mit der Funktion StringReplace kannst du unerwünschte Zeichen aus einem String entfernen, schau dir doch dazu die Hilfe an,

    mfg (Auto)Bert

  • Ich weiss nicht ob es gnz rüber gekommen ist, ich will nix ersetzen sondern überflüssiges löschen.
    ich gebe mal zwei Beispile hier rein


    ein mal Beispiel aus dem Chrome-Browser

    Spoiler anzeigen

    1
    mongo(5904 EP)
    Chemiker *Zzz*
    Heute: 0 EP
    0
    0
    0
    0
    0
    6541
    7563
    0
    0
    0
    0
    0
    0
    0
    0
    0
    2


    und ein mal aus dem SeaMonkey

    Spoiler anzeigen

    1
    mongo(5904 EP)
    Chemiker *Zzz*
    Heute: 0 EP

    0

    0

    0

    0

    0

    6541

    7563

    0

    0

    0

    0

    0

    0

    0

    0

    0


    wie man sieht macht Seamonkey Zeilen zwischen die Daten, was der Chrome nicht tut, ich müsste jetzt damit mein script beide Datenquellen nutzen kann irgendwie die Leerzeilen nebst den darin enthalten Leerzeiche los werden, mir will nur zur Zeit nicht in Kopf wie mir da ein Ersetzen-Befehl weiter helfen soll (kann sein das ich um die Zeit vielleicht ein bisschen vernagelt bin)

  • Nach zwei Tassen Kaffee und drei Zigaretten bin ich auf vielleicht etwas umständliche Lösung gekommen, die Euch nicht vorenthalten will

    [autoit]


    Func Start()
    $File = FileOpen("test.txt", 10)
    $count = _GUICtrlEdit_GetLineCount($Edit1)
    $index = 0
    For $i = 0 to $count + 1
    $zeile = _GUICtrlEdit_GetLine($Edit1, $index)
    IF Not StringIsSpace($zeile) Then
    FileWriteLine ($File, $zeile)
    EndIf
    $index = $index + 1
    Next
    FileClose($File)

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

    EndFunc

    [/autoit]

    Was meint Ihr dazu?

    Achso $Edit1 ist ein handel von einem Eingabefeld

    • Offizieller Beitrag
    [autoit]

    #include<Array.au3>
    #include<File.au3>
    Global $pfad = @ScriptDir & '\leerzeilen.txt', $lines_A
    _FileReadToArray($pfad, $lines_A)
    For $i = UBound($lines_A) - 1 To 1 Step - 1
    If Not StringRegExp($lines_A[$i], '[^\s]', 0) Then _ArrayDelete($lines_A, $i)
    Next
    _FileWriteFromArray($pfad, $lines_A, 1)

    [/autoit]
  • Vielleicht denke ich ja auch manchmal zu einfach, aber tut es nicht auch :

    Spoiler anzeigen
    [autoit]

    $file = FileOpen("IN.txt",0)
    $inhalt = FileRead($file)
    FileClose($File)

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

    Do
    $inhalt = StringReplace($inhalt,@CRLF & @CRLF, @CRLF)
    Until @extended = 0

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

    $file = FileOpen("OUT.txt",2)
    $inhalt = FileWrite($file, $inhalt)
    FileClose($File)

    [/autoit]

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • Wiso nemmt ihr eigentlich immer fileopen und fileclose es geht doch einfach nur mit filewrite auch?

  • Achso danke aber so wird es nicht überschrieben

    [autoit]

    $sFile = StringRegExpReplace(FileRead('in.txt'), '(\r\n){2,}', @CRLF)
    FileDelete('out.txt')
    $hFile = FileWrite('out.txt', $sFile)

    [/autoit]
  • Na, dann aber noch kürzer: ;)

    [autoit]


    $sFile = StringRegExpReplace(FileRead('in.txt'), '(\r\n){2,}', @CRLF)
    $hFile = FileOpen('out.txt', 2)
    FileWrite($hFile, $sFile)
    FileClose($hFile)

    [/autoit]

    Hier ist das Problem, so eine Leerzeile bleiben, also bei 3 sollen 2 weg bei 5 sollen 4 weg, dann geht das nicht. Läßt man die Schleife mehrfach durchlaufen und sind mal 3 mal 5 mal 9 Leerzeilen da gibt es auch probleme. Zum Teil gar keine Leerzeile, mal noch drei Leerzeilen.
    Aber das ist nicht nur bei Oscar's Lsg. so, sondern bei allen angegebenen. *schaaaaaade*

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

    • Offizieller Beitrag

    Alina, mein Script macht genau das. Also immer wenn 2 und mehr @crlf hintereinander stehen, werden sie zu einem reduziert.
    Voraussetzung hierfür ist allerdings, dass die Zeilen mit @crlf abgeschlossen sind (Windows-typisch) und nicht nur mit @lf oder @cr.
    Weitere Vorraussetzung ist, dass die @crlf wirklich hintereinander stehen und sich nicht ein oder mehrere Leerzeichen in den Zeilen befinden (wären genaugenommen ja dann auch keine Leerzeilen).

    Edit: Wobei man auch für andere Texte ein Pattern schreiben könnte. Bräuchte dann aber mal ein Beispieltext.

  • [autoit]

    local $string
    $in=fileopen("in.txt",0)
    while 1
    $line=filereadline($in) ;filereadline"klaut" die @crlf am ende der zeile
    If @error = -1 Then ExitLoop
    if stringisspace($line)<>1 and $line<>"" then $string&=$line&@crlf ;zeile besteht nicht aus leerstring, leerzeichen oder tab oder cr oder lf....
    wend
    filedelete("out.txt")
    $out=filewrite("out.txt",$string)
    exit

    [/autoit]

    entfernt alle "optisch leeren Zeilen", d.h. Leerzeichen,TAB,LF, CRLF und Kombinationen davon innerhalb einer Zeile

    Alina

    Spoiler anzeigen
    [autoit]

    local $string
    $in=fileopen("in.txt",0)
    $crlf_flag=0
    while 1
    $line=filereadline($in) ;"klaut" die @crlf am ende der zeile
    If @error = -1 Then ExitLoop
    if stringisspace($line)<>1 and $line<>"" then
    if $crlf_flag=0 then
    $string&=$line&@crlf ;zeile besteht nicht aus leerstringleerzeichen oder tab oder cr oder lf....
    Else
    $string&=@crlf&$line&@crlf
    $crlf_flag=0
    endif
    Else
    $crlf_flag=1
    endif
    wend
    filedelete("out.txt")
    $out=filewrite("out.txt",$string)
    exit

    [/autoit]

    entfernt die "optisch leeren Zeilen" und ersetzt sie mit einem @CRLF.
    Ich hatte dich so verstanden, daß mehrere Leerzeilen auf eine einzige Leerzeile (@CRLF) reduziert werden sollten

  • Genau das letzte meinte ich !
    Vielen lieben Dank.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

    • Offizieller Beitrag

    Das geht aber auch kürzer:

    [autoit]

    $szTxt = StringRegExpReplace(FileRead("test.txt"), '\s{2,}\r\n', @CRLF)
    ConsoleWrite($szTxt & @CRLF)
    FileDelete("test.txt")
    FileWrite("test.txt", $szTxt)

    [/autoit]
  • Oda so?

    $FileRead = FileRead ("test.txt")
    $FileOpen = FileOpen ("test.txt", 2)
    FileWrite ($FileOpen, StringReplace ($FileRead, " ", ""))
    FileClose ($FileOpen)

    sry, tag geht grad net -.-