none
Powershell. Eine Zeile lesen RRS feed

  • Frage

  • Ich möchte aus einer 1 GB Datei nur ganz vorne ein Zeichen hinzufügen jedoch nicht alle Zeilen lesen da sonst das zu lange dauert. Also suche ich nach einem Script wo man nur am anfang etwas dazu schreiben muss. Außerdem würde ich auch gerne wissen wie das geht das man dieses eine Zeichen wieder löscht also ebenfalls nicht alles lesen. Danke im Vorraus
    Freitag, 19. August 2016 21:20

Antworten

  • Moin,

    Du musst Dir mal überlegen, was "unter der Haube" passiert. Wenn Du "nur" vorn ein Zeichen einfügst, müssen ja die restlichen 1048576 Bytes auf der Platte nach hinten verschoben werden... Es ist also auf jeden Fall eine aufwendige Operation, die nach Möglichkeit zu vermeiden ist. Etwas schneller und weniger speicherintensiv als natives PowerShell wird die Verwendung von .NET-Klassen und -Methoden sein:

    $content = [IO.File]::ReadAllText("x:\temp\test.txt")

    dann verändern und mit WriteAllText zurückschreiben. Das zerschießt Dir auch keine Zeilenenden und keine Kodierung. Aber viel performanter wird es nicht, denn Du musst so oder so die ganze Datei schreiben.

    Vielleicht kann man das noch ein bißchen optimieren, wenn man den Buchstaben in eine neue Datei ausgibt und dann einfach mit

    copy kleinertext.txt + grossertext.txt neuertext.txt
    del /q grossertext.txt
    del /q kleinertext.txt
    ren neuertext.txt grossertext.txt
    

    agiert...

    Das Zeichen löschen, die gleiche Geschichte. Willst Du es physisch löschen, dann verschiebt sich ja der ganze Schwanz wieder nach vorne, und da musst Du es halt lesen und schreiben... Da würde ich lieber versuchen, das erste Zeichen einfach mit einem nicht-druckbaren Zeichen zu überschreiben, wenn es schnell gehen soll.

    Magst Du mal erzählen, wo die Anforderung herkommt? Vermutlich sind Dateien hier einfach nicht die richtige Wahl der Datenhaltungstechnologie...


    Evgenij Smirnov

    msg services ag, Berlin -> http://www.msg-services.de
    my personal blog (mostly German) -> http://it-pro-berlin.de
    Windows Server User Group, Berlin -> http://www.winsvr-berlin.de
    Mark Minasi Technical Forum, reloaded -> http://newforum.minasi.com

    In theory, there is no difference between theory and practice. In practice, there is.

    Freitag, 19. August 2016 21:55