Entfernen Sie die letzte Zeile aus der Datei mit Powershell

8

Ich verwende

%Vor%

Entfernen Sie die leeren Zeilen, die SSRS am Ende meiner CSVs platziert.

Die letzte Zeile, die Daten enthält, endet jedoch mit einer CRLF (wie in Notepad ++ angezeigt) - und diese wird nicht entfernt, also gibt es technisch gesehen immer noch eine leere Zeile am Ende der Datei.

>

Gibt es eine Möglichkeit, diese CRLF aus der letzten Zeile zu entfernen (und natürlich die Daten intakt zu halten)?

    
stuartdotnet 25.07.2012, 05:03
quelle

5 Antworten

9

Wenn Sie bereits wissen, dass die letzte Sache der Datei eine CRLF ist, die Sie loswerden wollen (und Sie kennen die Kodierung auch), können Sie den schnellen Weg gehen:

%Vor%

Dies ist eine direkte Kürzung der Datei. Es funktioniert, ohne die gesamte Datei in den Speicher zu lesen (sehr schön, wenn Sie eine sehr große Datei haben). Es funktioniert für ASCII, Latin * und UTF-8. Für UTF-16 wird das nicht funktionieren (in diesem Fall müssten Sie vier Bytes vom Ende entfernen).

Sie können eine zusätzliche Überprüfung hinzufügen, dass die letzten beiden Bytes wirklich sind, was Sie entfernen möchten:

%Vor%

Passen Sie erneut an, wenn Sie eine andere Kodierung verwenden, z. Für UTF-16 müssen Sie entweder mit 0,10,0,13 oder 10,0,13,0 vergleichen.

Einverstanden, das ist nicht sehr PowerShell-ey, aber seit ich einen 700-MiB-Datenbank-Dump verarbeiten musste, bin ich vorsichtig beim Lesen von möglicherweise großen Dateien im Speicher;)

    
Joey 25.07.2012, 07:33
quelle
5

Wenn Sie eine Datei mit Get-Content lesen, streamt jede Zeile die Pipe als String ab. Wenn Out-File (im Wesentlichen was > ein Alias ​​für ist) diese Strings erhält, hängt es immer eine Zeilenabschlusssequenz an. Versuchen Sie Folgendes, wenn die Dateien nicht zu groß sind:

%Vor%

Dies ist die Datei vor:

%Vor%

und nachher: ​​

%Vor%     
Keith Hill 25.07.2012 05:27
quelle
2

Ich bin mir nicht sicher, wie zutreffend das für die Situation ist, aber meine Google-Suche nach dem Entfernen der letzten Zeile einer Textdatei führte mich hierher und die obigen Beispiele / Lösungen haben nicht funktioniert. Dies ist der Befehl, den ich verwenden konnte, um dies zum Laufen zu bringen:

%Vor%

Wenn Sie mit einer großen Datei arbeiten, möchten Sie diese möglicherweise zuerst an eine temporäre Datei leiten.

    
Geoff Dawdy 10.01.2013 19:43
quelle
0

Versuchen Sie das, obwohl es ALLE leeren Zeilen aus Ihrer Datei entfernen wird

%Vor%     
Shay Levy 25.07.2012 07:27
quelle
0

Verwenden Sie für das Dateiformat "UCS-2 Little Endian" Folgendes:

%Vor%     
Omidoo 15.11.2012 18:57
quelle

Tags und Links