manrique
Goto Top

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

Content-Key: 414825

Url: https://administrator.de/contentid/414825

Ausgedruckt am: 28.03.2024 um 17:03 Uhr

Mitglied: 138721
138721 07.02.2019 aktualisiert um 13:05:45 Uhr
Goto Top
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.
Mitglied: Kraemer
Kraemer 07.02.2019 um 13:03:18 Uhr
Goto Top
Moin,
Zitat von @Manrique:
Kann mir bitte jemand helfen?
klar, nur leider hast du vergessen, deinen Code zu posten.

Gruß
Mitglied: it-frosch
it-frosch 07.02.2019 um 13:05:51 Uhr
Goto Top
Hallo Manrique,

eine zweite Möglichkeit wäre eine extra Tabelle in der dir mit Formeln das gewünschte Exportformat zusammenbaust.
Diese speicherst du dann als CSV ab.

grüsse vom it-frosch
Mitglied: erikro
erikro 07.02.2019 um 13:44:47 Uhr
Goto Top
Moin,

ja, mit Powershell kein Problem. Ein paar Tipps und dann ran an die Tasten. face-wink

Zitat von @Manrique:
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
Mitglied: colinardo
Lösung colinardo 07.02.2019 aktualisiert um 14:39:03 Uhr
Goto Top
Servus @Manrique,
du hast Post.

Grüße Uwe
Mitglied: erikro
erikro 07.02.2019 um 14:40:07 Uhr
Goto Top
Zitat von @colinardo:

Servus @Manrique,
du hast Post.

Grüße Uwe

Och nöööööö. Ich lerne immer wieder gerne aus Deinen Skripten. face-smile
Mitglied: colinardo
colinardo 07.02.2019 aktualisiert um 14:46:19 Uhr
Goto Top
Och nöööööö.
Dann gebt euch das nächste mal etwas mehr Mühe beim Antworten, Ihr könnt das, Ihr müsst es nur wollen.
Mitglied: erikro
erikro 07.02.2019 um 14:46:32 Uhr
Goto Top
Zitat von @colinardo:

Dann gebt euch das nächste mal etwas mehr Mühe beim Antworten, Ihr könnt das.

Hätte ich ja gerne. Aber manchmal muss ich auch arbeiten. face-wink Das nächste Mal sage ich die Besprechung mit der Geschäftsleitung ab. face-wink
Mitglied: colinardo
colinardo 07.02.2019 aktualisiert um 14:55:51 Uhr
Goto Top
Aber manchmal muss ich auch arbeiten.
Ich auch, aber dann lieber nicht antworten und warten bis man die Zeit aufbringen kann. So zwischen Tür und Angel kommt da meist nicht viel bei raus.
Mitglied: Manrique
Manrique 08.02.2019 um 09:40:24 Uhr
Goto Top
Hallo Uwe,

vielen Dank für die Hilfe. Es funktioniert schon fast. Hab dir geschrieben.

Kannst du mir vielleicht nochmal helfen?

LG
Mitglied: colinardo
colinardo 08.02.2019 aktualisiert um 11:36:42 Uhr
Goto Top
Zitat von @Manrique:
Kannst du mir vielleicht nochmal helfen?
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 face-wink. 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.