Csv file - neue Spaltenanordnung und Werte in neues csv file schreiben
Hallo an alle,
ein csv file soll mit anderer Anordnung der Spalten und tlw. anderen Werten unter neuem Namen gespeichert werden.
Alle Zeilen welche im csv file alt in der Spalte D keinen Wert enthalten werden nicht ins csv file NEU geschrieben.
Es sollen Werte (zB. Datum, text) aus dem ursprünglichen file in ANDERE Spalten (neue Anordnung und Namen) übernommen werden.
Alte Werte (zB. Konto, GKonto) sollen durch neue im Code definierte Referenzwerte (geht das mit ArrAlt u. ArrNeu?) ersetzt werden: aus 282 wird 2800, aus 281 wird 2810, aus 725 wird 4254 etc.
Splitting Spalte Beleg: aus R1 wird RB in der Spalte symb und 1 in der Spalte belegnr ( Regel: R wird immer zu RB, S wird immer zu SP, Nr bleibt, Schrägstrich und alles rechts davon entfernen).
betrag ( im ursprünglichen file steht dieser entweder in der Spalte S oder H) wird abhängig davon ob ein Wert in der Spalte proz steht nach obiger Formel berechnet.
satz hat immer Wert 0, code hat Wert 1 oder 2 (lt. obiger Formel)
csv file alt:
Nr; UNr; Datum; Beleg; Konto; GKonto; text; S; H; proz;
30; 1; 15.1.2019; ; 282; 711; Saldo; 14; ; ;
31; 1; 18.1.2019; R1/19 ; 281; 725; wartung; 48; ; ;
32; 1; 20.1.2019; S2 ; 285; 402; test ; ; 86 ; 20;
Definitionen:
arrAlt = Array ( 282, 281, 285, 711, 725, 402)
arrNeu = Array ( 2800, 2810, 2085, 7141, 7254, 4230)
ste = wenn ( proz > 0; Wert aus Spalte S oder H / 1+proz; "" )
betrag = wenn ( proz > 0; Wert aus Spalte S oder H - ste; Wert aus Spalte S oder H )
code = wenn ( S > 0; 2; 1 )
csv file NEU:
satz; gkonto; konto; belegnr; datum; symb; code; prozent; betrag; ste; text;
0; arrNeu; arrNeu; 1 ; 18.1.2019; RB; 2 ; ; 48 ; ; wartung;
0; arrNeu; arrNeu; 2 ; 20.1.2019; SP; 1 ; 20 ; 71,67 ; 14,33; test;
Kann mir bitte jemand helfen?
Vielen DANK
ein csv file soll mit anderer Anordnung der Spalten und tlw. anderen Werten unter neuem Namen gespeichert werden.
Alle Zeilen welche im csv file alt in der Spalte D keinen Wert enthalten werden nicht ins csv file NEU geschrieben.
Es sollen Werte (zB. Datum, text) aus dem ursprünglichen file in ANDERE Spalten (neue Anordnung und Namen) übernommen werden.
Alte Werte (zB. Konto, GKonto) sollen durch neue im Code definierte Referenzwerte (geht das mit ArrAlt u. ArrNeu?) ersetzt werden: aus 282 wird 2800, aus 281 wird 2810, aus 725 wird 4254 etc.
Splitting Spalte Beleg: aus R1 wird RB in der Spalte symb und 1 in der Spalte belegnr ( Regel: R wird immer zu RB, S wird immer zu SP, Nr bleibt, Schrägstrich und alles rechts davon entfernen).
betrag ( im ursprünglichen file steht dieser entweder in der Spalte S oder H) wird abhängig davon ob ein Wert in der Spalte proz steht nach obiger Formel berechnet.
satz hat immer Wert 0, code hat Wert 1 oder 2 (lt. obiger Formel)
csv file alt:
Nr; UNr; Datum; Beleg; Konto; GKonto; text; S; H; proz;
30; 1; 15.1.2019; ; 282; 711; Saldo; 14; ; ;
31; 1; 18.1.2019; R1/19 ; 281; 725; wartung; 48; ; ;
32; 1; 20.1.2019; S2 ; 285; 402; test ; ; 86 ; 20;
Definitionen:
arrAlt = Array ( 282, 281, 285, 711, 725, 402)
arrNeu = Array ( 2800, 2810, 2085, 7141, 7254, 4230)
ste = wenn ( proz > 0; Wert aus Spalte S oder H / 1+proz; "" )
betrag = wenn ( proz > 0; Wert aus Spalte S oder H - ste; Wert aus Spalte S oder H )
code = wenn ( S > 0; 2; 1 )
csv file NEU:
satz; gkonto; konto; belegnr; datum; symb; code; prozent; betrag; ste; text;
0; arrNeu; arrNeu; 1 ; 18.1.2019; RB; 2 ; ; 48 ; ; wartung;
0; arrNeu; arrNeu; 2 ; 20.1.2019; SP; 1 ; 20 ; 71,67 ; 14,33; test;
Kann mir bitte jemand helfen?
Vielen DANK
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 414825
Url: https://administrator.de/contentid/414825
Ausgedruckt am: 24.11.2024 um 03:11 Uhr
11 Kommentare
Neuester Kommentar
ein csv file soll mit anderer Anordnung der Spalten und tlw. anderen Werten unter neuem Namen gespeichert werden.
Dann mach es doch.Powershell ist dein Freund.
https://blog.netwrix.com/2018/02/21/windows-powershell-scripting-tutoria ...
Ein Meister fällt nicht vom Himmel, und das hier ist kein Wunschkonzert. Fang erst mal selbst an und wenn du dann konkrete Fragen hast melde dich.
Das klingt hier nämlich verdächtig nach, "ich hab kein Bock mich damit auseinander zu setzen und lass mir das mal schön bequem von der Community fertig machen."
Gruß l.
Btw. Links in der Symbolleiste gibt's ein </> womit man seine Inhalte schön vom Fließtext abgrenzen kann! So will das doch keiner lesen.
Moin,
klar, nur leider hast du vergessen, deinen Code zu posten.
Gruß
klar, nur leider hast du vergessen, deinen Code zu posten.
Gruß
Moin,
ja, mit Powershell kein Problem. Ein paar Tipps und dann ran an die Tasten.
Nein, keine zwei Arrays, sondern ein Hashtable mit dem alten Wert als Schlüssel und dem neuen als Wert. Dann kann das so aussehen:
Ansonsten kannst Du hier nachlesen, wie man mit csv umgeht:
https://www.msxfaq.de/code/powershell/pscsv.htm#csv_selbst_erstellen
Hier findest Du die komplette Doku:
https://docs.microsoft.com/de-de/powershell/
Viel Spaß!
hth
Erik
ja, mit Powershell kein Problem. Ein paar Tipps und dann ran an die Tasten.
Zitat von @Manrique:
Definitionen:
arrAlt = Array ( 282, 281, 285, 711, 725, 402)
arrNeu = Array ( 2800, 2810, 2085, 7141, 7254, 4230)
Definitionen:
arrAlt = Array ( 282, 281, 285, 711, 725, 402)
arrNeu = Array ( 2800, 2810, 2085, 7141, 7254, 4230)
Nein, keine zwei Arrays, sondern ein Hashtable mit dem alten Wert als Schlüssel und dem neuen als Wert. Dann kann das so aussehen:
$datensatzneu.konto = $hash[$datensatzalt.konto]
Ansonsten kannst Du hier nachlesen, wie man mit csv umgeht:
https://www.msxfaq.de/code/powershell/pscsv.htm#csv_selbst_erstellen
Hier findest Du die komplette Doku:
https://docs.microsoft.com/de-de/powershell/
Viel Spaß!
hth
Erik
Och nöööööö. Ich lerne immer wieder gerne aus Deinen Skripten.
Hätte ich ja gerne. Aber manchmal muss ich auch arbeiten. Das nächste Mal sage ich die Besprechung mit der Geschäftsleitung ab.
Sicher, aber auch ein Admin hat noch andere Arbeit, etwas Geduld musst du schon mitbringen. Bei 20-30 PMs am Tag kann ich nicht jedes Wehwehchen prompt liefern . Jeder ist dran wann er dran ist und echte Aufträge sind halt in der Prio weiter oben. Auch das Bombardieren mit PMs hilft dir da nicht, weiter nach oben in der Liste zu rutschen!
Grüße Uwe
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen. Merci.
Grüße Uwe
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen. Merci.