Batch oder Powershell für .txt Datei

batch_prog

Cadet 2nd Year
Registriert
März 2017
Beiträge
27
Moin, moin,

ich bin gerade auf der Suche nach einem Batch oder einem Powershell-Befehl mit ich nachfolgendes bewirken kann;

Eine bestehende längere .txt welche wie folgt aufgebaut ist:

Code:
test;test;test;test;[1x Leerzeichen]
[neue zeile durch eingabe]

die Werte hier sind nur Beispielhaft; ich suche schon länger nach einem "Codeschnipsel" der "das leerzeichen und die neue zeile durch eingabe" entfernt; jemand eine Idee?

Beste Grüße,
batch_prog!
 
Du meinst mit neue Zeile durch Eingabe eine Leerzeile? Mir würde als erstes awk einfallen, da kommt es jetzt aber genauer darauf an was Du genau machen willst.
 
Moin Rage,
ja.

Das Programm aus dem der .txt Export kommt fügt der Datei nach dem letzten ';' noch ein Leerzeichen und eine neue Zeile hinzu. Das kann ich aber für die Weiterverarbeitung nicht nutzen. Dadurch bin ich auf der Suche das über ein Batch o.ä. zu entfernen, da die Datei immer etwas größer ist.
 
Nochmal: Die Zeile die da hinzugefüht wird ist eine Leerzeile? Leerzeilen kann man ganz fix und ohne Probleme mit awk aus beliebigen Dateien rauslöschen. Das letzte Leerzeichen könnte schwieriger werden. Um leere Zeilen zu entfernen machst Du das hier in der bash oder Powershell oder irgendwo anders, wo man awk haben kann:

Code:
awk -F „;“ 'NF > 0' <filename.txt>

Ohne zusätzliche Anweisung gibt awk standardmaßig den eingelesenen Inhalt aus; awk liest zeilenweise. NF ist die Anzahl Felder (bzw. Spalten) pro eingelesene Zeile, NR gibt die Anzahl bis jetzt eingelesener Zeilen. Eventuell kann man das benutzen um in der vorangegangenen Zeile das letzte Feld zu löschen, wenn es keine feste Anzahl Spalten geben sollte, ansonsten könnte man aus jeder Eingabe nur die feste Anzahl Spalten ausgeben. Dazu brauche ich mehr Infos.

Wie verarbeitest Du denn die Tabelle? Gibts es irgendwie eine feste Anzahl an Spalten außer dann, wenn das Leerzeichen draufkommt?
 
Die aufgabe ist nicht 100%.

Allgemein gesagt sollt es aber lösbar sein durch Powershell und dann der Verwendung des .net FileReaders... ggf. braucht man noch RegEx

Für weiter Informationen braucht man im Idealfall Beispieldaten und eine genaue Erklärung.
 
Zuletzt bearbeitet:
In PowerShell ganz einfach:
Code:
Get-Content file.txt | ? { ![string]::IsNullOrWhiteSpace( $_ ) } | % { $_.Trim() } > out.txt
 
Kryptischer hättest du es aber auch nicht schreiben können oder? ;)

get-content ist halt sau lahm bei größeren Textdateien, da wäre dann der .net filereader zu bevorzugen
 
pizza4ever schrieb:
Kryptischer hättest du es aber auch nicht schreiben können oder?
Warum? PowerShell ist zum Pipen gemacht. Ich könnte es höchsten unleserlicher machen und ? durch Where-Object und % durch ForEach-Object ersetzen.
pizza4ever schrieb:
get-content ist halt sau lahm bei größeren Textdateien, da wäre dann der .net filereader zu bevorzugen
Wer keine Angaben zum Inhalt macht, bekommt auch nicht mehr.
Code:
$infile = [IO.File]::OpenRead( "file.txt" )
$outfile = [IO.File]::OpenWrite( "out.txt" )
$reader = New-Object System.IO.StreamReader( $infile, [Text.Encoding]::UTF8, $true, 4096 )
$writer = New-Object System.IO.StreamWriter( $outfile, (New-Object System.Text.UTF8Encoding( $false )), 4096, $false )
while( $null -ne ($line = $reader.ReadLine()) )
{
	if( ![string]::IsNullOrWhiteSpace( $line ) )
	{
		$writer.WriteLine( $line.Trim() )
	}
}
$reader.Close()
$writer.Close()
 
Zurück
Oben