114298

Inhalt einer .csv mit PowerShell prüfen

Hallo zusammen,

ich bin noch bisschen am hin und her überlegen wie ich das Problem am besten löse:

Ich habe eine .csv Datei. In der Spalte A sind mehrere Datensätze(94 Spalten) enthalten die mit einem { getrennt sind.
Ich möchte jetzt prüfen, ob die Datei auch vollständig ist, sprich, ich möchte prüfen, ob 94 mal das { in der Spalte A enthalten ist.
Die Datei hat 94 Spalten und mehrere tausend Zeilen. Das ist immer unterschiedlich.

Ich habe einmal überlegt, das excel zu öffnen und über Powershell eine Excel-Formel in Excel einzufügen die das prüft weil ich keine Powershell funktion gefunden habe.

Vielleicht kann mir einer ja einen Gedankenstoss geben, wie ich das mit Powershell-Funktionen lösen kann.

Besten Dank face-smile

Grüße
Memo
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 273493

Url: https://administrator.de/forum/inhalt-einer-csv-mit-powershell-pruefen-273493.html

Ausgedruckt am: 28.04.2025 um 10:04 Uhr

114757
114757 01.06.2015 aktualisiert um 11:21:21 Uhr
Goto Top
Moin,
Zitat von @114298:
Ich habe eine .csv Datei. In der Spalte A sind mehrere Datensätze(94 Spalten) enthalten die mit einem { getrennt sind.
Ja wie jetzt ?? das { ist das Trennteichen der Spalten oder nur für diese innerhalb der Spalte A ??
Ich möchte jetzt prüfen, ob die Datei auch vollständig ist, sprich, ich möchte prüfen, ob 94 mal das { in
der Spalte A enthalten ist.
Dito, das Trennzeichen der CSV mehrmals in einer einzigen Spalte ?? Konfus ...
Die Datei hat 94 Spalten und mehrere tausend Zeilen. Das ist immer unterschiedlich.
Ok
Klär uns mal mit einer Beispielzeile deiner CSV auf , hat diese auch Überschriften etc. pp
Danke.

Gruß jodel32
114298
114298 01.06.2015 um 11:38:04 Uhr
Goto Top
Hi,
also das ist ein Export aus einem Vorsystem. Dabei werden alle Daten (z.B. Jahr, Monat...) so automatisch exportiert, dass diese in der Spalte A mit einem Trennzeichen sind.
Bsp:
Zeile 1:Jahr{Monat{.....
Zeile 2: 2015{Januar{....
und das mehrere tausend mal

Ich möchte nun prüfen, ob es auch wirklich 95 Spalten sind (94 Trennzeichen) - habe es oben falsch geschrieben, sorry.

Anbei mal mein bisheriger Code:

$ExcelPath = <path>
$Excel = New-Object -ComObject Excel.Application
$Excel.Visible = $True
$ExcelWordBook = $Excel.Workbooks.Open($ExcelPath)
$ExcelWorkSheet = $Excel.WorkSheets.item("Tabelle1")
$strFormula = &quot;=LÄNGE(A1) -LÄNGE( WECHSELN(A1;"{";""))&quot; - wobei ich in der Zeile noch einen Fehler bekomme
$Excel.Cells.Item(Zeile, 2).Formula = $strFormula

Das war mal so der Grundgedanke.
Aber das gefällt mir überhaupt nicht. Würde es gerne mit Powershell abprüfen.
114757
114757 01.06.2015 aktualisiert um 12:18:13 Uhr
Goto Top
Na das geht viel, viel einfacher und schneller ...
$csv = Import-CSV 'c:\test.csv' -Delimiter '{'  
If (($csv | gm -Membertype Noteproperty).length -eq 95){
    Write-Host "Anzahl der  Spalten OK"  
} else {
    Write-Host "Datei hat nicht die geforderte Anzahl an Spalten !" -ForegroundColor Yellow  
}
Gruß jodel32
114298
114298 01.06.2015 um 13:25:31 Uhr
Goto Top
Hi,

erst einmal besten Dank natürlich.
Hier läuft der aber nicht alle Zeilen durch sonder prüft nur ob die Spalten da sind. Wenn in Zeile 1234 nur 93 Spalten befüllt sind fällt das nicht auf?!

Und ich bekomme, wenn ich nur die csv importiere immer dieselbe Ausgabe, egal ob mit oder ohne delimiter.

Grüße
Memo
114757
114757 01.06.2015 aktualisiert um 13:42:39 Uhr
Goto Top
Zitat von @114298:
Hier läuft der aber nicht alle Zeilen durch sonder prüft nur ob die Spalten da sind.
Dann sollte man das auch explizit erwähnen face-confused
Ist aber kein Beinbruch ... wie heißt die letzte Spalte ? Dann mach ich dir den Code ...
$csv = Import-CSV 'c:\test.csv' -Delimiter '{'  
$rows_not_ok = $csv | ?{$_.CQ -eq ''}  
write-host "Folgende Zeilen sind nicht vollständig:"  
$rows_not_ok
114298
114298 01.06.2015 um 13:40:11 Uhr
Goto Top
Das wäre die Spalte CQ
114757
114757 01.06.2015 aktualisiert um 13:50:11 Uhr
Goto Top
Siehe oben....

So geht's alternativ aber auch, falls die Datei nicht CSV Konform sein sollte :
$csv = gc "C:\temp\daten.csv"  
$rows_not_ok = $csv | select -skip 1 | ?{$_.Split("{").Length -lt 95}  
if ($rows_not_ok){
    write-host "Folgende Zeilen sind nicht OK:" -ForegroundColor Yellow  
    $rows_not_ok
}
114298
114298 01.06.2015 um 13:53:59 Uhr
Goto Top
funktioniert, vielen Dank!

eine kleine Frage hätte ich noch, kann ich irgendwie die Zeilennummer mit ausgeben?
Bei mehreren tausend Datensätzen die alle ähnlich aussehen ist es dann doch ziemlich schwer die Zeilen ausfindig zu machen.
114757
Lösung 114757 01.06.2015 aktualisiert um 14:26:17 Uhr
Goto Top
$csv = gc "C:\temp\daten.csv"  
1..($csv.Length - 1) | %{
    if ($csv[$_].Split("{").Length -lt 95){  
        write-host "Zeile: $($_ + 1) ist nicht vollständig"  
    }
}
114298
114298 01.06.2015 um 14:26:12 Uhr
Goto Top
Danke dir vielmals face-smile