Editor Commands?

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
Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren
Erzesel  21.04.2024, 17:43

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'
0
Erzesel  21.04.2024, 17:47

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"
0

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