Editor Commands?
Wie entferne ich im Texteditor hier die reihen simikolons ganz am Anfang und am Ende was gibt es da für eine Tastenkombination zu makieren?
; ID ; ISBN ; Ausleihdatum ; Rückgabedatum ; Name ;
; 1 ; 9781234567 ; 2024-04-01 ; 2024-04-15 ; Max Mustermann ;
; 2 ; 9782345678 ; 2024-03-15 ; 2024-04-01 ; Maria Musterfrau ;
; 3 ; 9783456789 ; 2024-04-05 ; ; Hans Beispiel ;
; 4 ; 9784567890 ; 2024-04-10 ; 2024-04-30 ; Emma Testperson ;
; 5 ; 9785678901 ; 2024-03-20 ; ; Lisa Beispiel ;
3 Antworten
Du kannst einen Texteditor wie Notepad++ oder Sublime Text nutzen, der beim Suchen und Ersetzen reguläre Ausdrücke erlaubt.
Die Semikolons am Zeilenanfang könntest du folgendermaßen mit
^;
aufspüren und die Semikolons am Zeilenende mit
;$
Mit den normalen Windowseditor bekommst Du die Smikolon nicht automatisiert weg.
ich empfehle einfach ein kleines PowershellScript
demo.ps1
Get-Content 'demo.txt' -Encoding 'UTF8'|
Where-Object {$_}| #ggf. lerre Zeilen entfernen
ForEach-Object{
$_ -replace '^;(.*);$','$1' #ersetze die ganze Zeile mit dem Inhalt der Gruppe $1 , zu der nicht die ersten und letzten Semikolon gehören
#oder $_.Trim(';')
} > 'new.txt'
.oder verkürzt als direkte Powershell-Kommandozeile:
gc 'demo.txt' -enc UTF8|?{$_}|%{$_ -replace '^;(.*);$','$1'} > 'new.txt'
...oder:
gc 'demo.txt' -enc UTF8|?{$_}|%{$_.Trim(';')} > 'new.txt'
...das war die brutale Variante.
eleganter wäre es natürlich ein CSV auch als Collection von Objekten zu behandeln und diese von "Fehlern zu befreien.
Import-Csv 'demo.txt' -Delimiter ';' -Header (0..6|%{"Fake$_"}) | #fake einen "übergeordneten" Header welcher auch PropertyNamen die leeren Felder definiert
Select-Object -Property @(1..5|%{"Fake$_"})| #Wähle nur die Properties welche es wirklich gibt
ConvertTo-Csv -Delimiter ';' -NoTypeInformation| #wieder in ein CSV
Select-Object -Skip 1 | #unseren "FakeHeader" wieder entfernen
ForEach-Object{$_ -replace '"',''} | #optional (Zeile weglassen): Quotes in den Zeilen entfernen
Set-Content 'New-csv.txt' #Speichern
resultat:
ID;ISBN;Ausleihdatum;Rückgabedatum;Name
1;9781234567;2024-04-01;2024-04-15;Max Mustermann
2;9782345678;2024-03-15;2024-04-01;Maria Musterfrau
3;9783456789;2024-04-05;;Hans Beispiel
4;9784567890;2024-04-10;2024-04-30;Emma Testperson
5;9785678901;2024-03-20;;Lisa Beispiel
bzw:
"ID";"ISBN";"Ausleihdatum";"Rückgabedatum";"Name"
"1";"9781234567";"2024-04-01";"2024-04-15";"Max Mustermann"
"2";"9782345678";"2024-03-15";"2024-04-01";"Maria Musterfrau"
"3";"9783456789";"2024-04-05";"";"Hans Beispiel"
"4";"9784567890";"2024-04-10";"2024-04-30";"Emma Testperson"
"5";"9785678901";"2024-03-20";"";"Lisa Beispiel"
PS:
in Deinem csv lungern sehr viele Leerzeichen herum, welche bei der Weiterverarbeitung durchaus sehr störend wirken könnten. Hier noch eine Variante, welche ein wirklich sauberes CSV erstellt.
Import-Csv 'demo.txt' -Delimiter ';' -Header (0..6|%{"Fake$_"})|
Select-Object -Property @(1..5|%{"Fake$_"})|
ForEach-Object {
$Obj = $_
$ObjPropetyNames = ($_| Get-Member -MemberType *Property ).Name
#neues Object mit Strings ohne führende/endende Leerzeichen zusammenbauen
$Result = New-Object PSObject
$ObjPropetyNames|%{
$CleanedString = $Obj.$($_).Trim() #entferne umgebende Leerzeichen
$Result|Add-Member -MemberType NoteProperty -Name $_ -Value $CleanedString
}
$Result
}|
ConvertTo-Csv -Delimiter ';' -NoTypeInformation|
Select-Object -Skip 1 |
ForEach-Object{$_ -replace '"',''}| #optional (Zeile weglassen): Quotes in den Zeilen entfernen
Set-Content 'New-csv.txt'
Da hier vim getaggt ist:
%s/^;\(.*\);$/\1
.
ID ; ISBN ; Ausleihdatum ; Rückgabedatum ; Name
1 ; 9781234567 ; 2024-04-01 ; 2024-04-15 ; Max Mustermann
2 ; 9782345678 ; 2024-03-15 ; 2024-04-01 ; Maria Musterfrau
3 ; 9783456789 ; 2024-04-05 ; ; Hans Beispiel
4 ; 9784567890 ; 2024-04-10 ; 2024-04-30 ; Emma Testperson
5 ; 9785678901 ; 2024-03-20 ; ; Lisa Beispiel