Csv file mit leeren Spalten - erste, zweite und letzte Zeile fix
Hallo an alle,
ein csv file soll mit neuer Anordnung (teilw. leere Spalten) der Spalten unter neuem Namen gespeichert werden. Die erste, zweite und letzte Zeile im neuen file sind vorgegeben:
erste Zeile: 1, 9999, 2021, 1012021, 4, 6, EUR
zweite Zeile: 100, PV, 3, 31012021, 1, 0.00
letzte Zeile: 111, 0.00
In der ersten Zeile variabel: Spalte C = $jahr, Spalte D = 101 + $jahr
In der zweiten Zeile variabel: Spalte D = $belegdatum, Spalte E = $monat
Das Ergebnis sollte so aussehen (im jpg sind in C1 und D1:D4 jedoch noch VJ-Werte):
Folgender Code (geht wahrscheinlich einfacher) bringt fast das gewünschte Ergebnis.
offene Fragen:
ist in der Header-Variable eine weitere Variable möglich? Fehler wenn ich das so mache: $header "1", "992", $jahr
wie kann ich am Ende des Codes das replace auf die ersten zwei Zeilen einschränken?
Kann mir bitte jemand helfen?
DANKE Manrique
ein csv file soll mit neuer Anordnung (teilw. leere Spalten) der Spalten unter neuem Namen gespeichert werden. Die erste, zweite und letzte Zeile im neuen file sind vorgegeben:
erste Zeile: 1, 9999, 2021, 1012021, 4, 6, EUR
zweite Zeile: 100, PV, 3, 31012021, 1, 0.00
letzte Zeile: 111, 0.00
In der ersten Zeile variabel: Spalte C = $jahr, Spalte D = 101 + $jahr
In der zweiten Zeile variabel: Spalte D = $belegdatum, Spalte E = $monat
Das Ergebnis sollte so aussehen (im jpg sind in C1 und D1:D4 jedoch noch VJ-Werte):
Folgender Code (geht wahrscheinlich einfacher) bringt fast das gewünschte Ergebnis.
offene Fragen:
ist in der Header-Variable eine weitere Variable möglich? Fehler wenn ich das so mache: $header "1", "992", $jahr
wie kann ich am Ende des Codes das replace auf die ersten zwei Zeilen einschränken?
$quellordner = 'C:\TEMP\source'
$done = 'C:\TEMP\done'
$zielordner = 'C:\TEMP'
if(!(Test-Path $zielordner)){md $zielordner -Force | out-null}
#$log = @()
$konto_replacements = @{
"3576" = "357600"
"3577" = "357700"
"9900" = "990000"
"-" = "999000"
}
gci $quellordner -Filter *.csv -File | %{
$csv = gc $_.Fullname -Encoding String | ?{$_ -notmatch '^\s*$'} | ConvertFrom-CSV -Delimiter ";"
$targetfile = "$zielordner\$($_.Basename)_Import$($_.Extension)"
$new = $csv | ?{$_.gkonto -eq '9900'} | %{
$konto = $_.konto
$konto = $konto_replacements.GetEnumerator() | ?{$_.key -eq $konto} | %{$_.Value}
$konto = @{$true = $konto_replacements.'-';$false = $konto}[$konto -eq $null]
$date = $_.belegdatum.replace(".", "")
$global:date = $date
$global:year = $date.Year
$nr = $_.belegnr
$global:nr = $nr
$betrag = $_.betrag.replace(".", "") #zuerst Tausendertrennzeichen entfernen
$betrag = $betrag.replace(",", ".") #dann Dezimaltrennzeichen ändern
$text = $_.text
$leer = ""
[pscustomObject]@{
100 = 110
PV = $konto
3 = $leer
$global:date = $date
$global:nr = $nr
"0.00" = $leer
betrag = $betrag
H = $leer
I = $leer
J = $leer
K = $leer
L = $leer
M = $leer
N = $leer
O = $text
}
}
$new | export-csv $targetfile -Delimiter ";" -NoType -Encoding UTF8 -Verbose
#Move-Item -Path $quellordner\*.csv -Destination $done
}
$header = "1", "992", "2021", "1012021", "4", "6", "EUR", "H", "I", "J", "K", "L", "M", "N", "O" #ACHTUNG: Jahreszahl (2021) und Beginn (1012021) sind statisch - bei Jahreswechsel anpassen!
# CSV importieren
$filedata = Import-csv $targetfile -Delimiter ";" -Header $header
# temporäre Spaltenbezeichnung "betrag" in Spalte G löschen
$filedata | %{
$_.EUR = $_.EUR -replace 'betrag',''
}
$lastval_A = 111
$lastval_B = "0.00"
$lastLine = "{0};{1}" -f $lastval_A,$lastval_B #an Delimiter anpassen: komma oder semilkom, etc.
# Daten zurückschreiben
$filedata | export-csv $targetfile -Delimiter ";" -NoType -Encoding UTF8 -Verbose
$lastLine | Add-Content -Path $targetfile
# temporäre Spaltenbezeichnungen in Zeile 1 + 2 löschen
$Zeilen = (Get-Content $targetfile) | ForEach-Object {
$zähler = 1
#foreach($Zeile in $Zeilen) {
If($zähler -lt 3) {
$_.replace("H",'').replace("I",'').replace("J",'').replace("K",'').replace("L",'').replace("M",'').replace("N",'').replace("O",'')
#}
#zähler erhöhen
$zähler++
}
} | Set-Content $targetfile
Kann mir bitte jemand helfen?
DANKE Manrique
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 649614
Url: https://administrator.de/contentid/649614
Ausgedruckt am: 24.11.2024 um 01:11 Uhr