wmessmer 0 Geschrieben 14. Dezember 2019 Melden Teilen Geschrieben 14. Dezember 2019 Hallo MCSE-Team, ich möchte eine CSV-Datei einzelner Spalten separieren. IST und SOLL wie folgt: IST Import-CSV: 100-1001;1234;101;MM;;;10.05.2020;;; 100-1002;1234;101;MM;;;1.11.2019;;; SOLL Export-CSV: 100-1001;1234;101;MM;;;20200510;;001; 100-1002;1234;101;MM;;;20191101;;001; Die Änderung soll in der 7.Spalte YYYYMMDD und 9.Spalte ein Default-Wert ausgeführt werden. Aktuelles Skript: $in_file = "D:\Daten\qsys\Powershell\NC_PM\NC_PM.csv" $out_file = "D:\Daten\qsys\Powershell\NC_PM\NC_PM_OUT.csv" $list = Import-Csv $in_file -Delimiter ";" -Header "szIdentNr", "szGeraeteNr", "sGrpNr", "szBezeichnung", "sKlassifizierung", "sPruefOrtBez", "dtPruefTermin", "dtLastPruefTermin", "dwMaxMessungen" Get-Process | Select-Object -First 5 | Foreach-Object { $list | Export-CSV -Path $out_file -NoTypeInformation } Kann mich jemand unterstützen? VG Werner Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 14. Dezember 2019 Melden Teilen Geschrieben 14. Dezember 2019 (bearbeitet) Ich finde, Du hast ein Talent zu verwirren ... was soll das mit dem "Get-Process | Select ..." und so weiter? Hast Du da versehentlich beim Kopieren das Falsche markiert? Hier ... so sollte's klappen $in_file = "D:\Daten\qsys\Powershell\NC_PM\NC_PM.csv" $out_file = "D:\Daten\qsys\Powershell\NC_PM\NC_PM_OUT.csv" $Header = @( 'szIdentNr', 'szGeraeteNr', 'sGrpNr', 'szBezeichnung', 'sKlassifizierung', 'sPruefOrtBez', 'dtPruefTermin', 'dtLastPruefTermin', 'dwMaxMessungen' ) Import-Csv $in_file -Delimiter ';' -Header $Header | Select-Object -Property 'szIdentNr', 'szGeraeteNr', 'sGrpNr', 'szBezeichnung', 'sKlassifizierung', 'sPruefOrtBez', @{ Name = 'dtPruefTermin'; Expression = { (Get-Date $_.dtPruefTermin -Format 'yyyyMMdd')} }, 'dtLastPruefTermin', @{ Name = 'dwMaxMessungen'; Expression = {'DefaultWert'} }| Export-CSV -Path $out_file -NoTypeInformation Ergänzung: Du solltest jeweils für die cmdlets, die Du benutzt, die Hilfe lesen - komplett und inklusive der Beispiele. Die Technik, die in diesem Code-Snippet benutzt wird nennt sich "calculated Properties". Einen ersten kleinen Hinweis darauf findest Du in der Hilfe für das cmdlet Select-Object im Beispiel #10. Dabei übergibst Du statt eines einfachen Strings, eine Hash-Table mit einem Stück Code, der die Property errechnet. bearbeitet 14. Dezember 2019 von BOfH_666 Zitieren Link zu diesem Kommentar
wmessmer 0 Geschrieben 14. Dezember 2019 Autor Melden Teilen Geschrieben 14. Dezember 2019 Danke für die schnelle Hilfe. Meine Verwirrung hat eher mit "copy-paste-keine-Ahnung" zu tun :-( Sieht ganz gut aus, jedoch benötige ich die Export-Datei ohne Spaltenname (erste Zeile) bzw. Anführungszeichen und der Trenner sollte ; sein. Kann dies auch mit Out-File gemacht werden? Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 14. Dezember 2019 Melden Teilen Geschrieben 14. Dezember 2019 vor 1 Stunde schrieb wmessmer: Sieht ganz gut aus, jedoch benötige ich die Export-Datei ohne Spaltenname (erste Zeile) bzw. Anführungszeichen und der Trenner sollte ; sein. Das mit dem "Trenner" ist einfach und das bekommst Du allein raus, wenn Du Dir einfach die Hilfe für Export-Csv anguckst. Wenn Du die Header weglassen willst und auch noch die Anführungszeichen, musst Du halt tricksen. standardkonformes CSV enthält nun mal beides und alle Tools, die standardkonformes CSV korrekt verarbeiten, können damit umgehen. Wofür brauchst Du die Daten denn so komisch? vor 1 Stunde schrieb wmessmer: Kann dies auch mit Out-File gemacht werden? Ja, aber dann musst Du Dich eben um die entsprechende Formatierung selbst kümmern. Ich würde empfehlen, so standardkonform zu arbeiten wie es irgend geht. Alles andere ist üblicherweise aufwändiger, fehlerträchtiger und schwerer zu warten und anzupassen, falls mal nötig. Wenn Du's doch unbedingt so machen willst, schau Dir mal ConvertTo-Csv an. Zitieren Link zu diesem Kommentar
wmessmer 0 Geschrieben 14. Dezember 2019 Autor Melden Teilen Geschrieben 14. Dezember 2019 Hallo BOfH_666, die Anführungszeichen und den Trenner habe ich jetzt so wie es sein soll. Die Daten werden über ein Schnittstellentool eingelesen. Wenn in der ersten Zeile die Spalten drin stehen läuft die Schnittstelle auf Fehler. Da gibt es noch den Parameter -Skip. Leider fehlt mir das KnowHow für das einbauen in das Objekt. Kannst du mich bitte nochmal unterstützen. VG Werner Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 14. Dezember 2019 Melden Teilen Geschrieben 14. Dezember 2019 (bearbeitet) vor 30 Minuten schrieb wmessmer: die Anführungszeichen und den Trenner habe ich jetzt so wie es sein soll. Super. Wie hast Du's gemacht? Zitat Die Daten werden über ein Schnittstellentool eingelesen. Aha. Zitat Wenn in der ersten Zeile die Spalten drin stehen läuft die Schnittstelle auf Fehler. Hmmm ... das ist ja nicht gerade sehr robust. Ich würd mich wohl mit dem Anbieter der Schnittstelle auseinandersetzen wollen. Warum toleriert man denn so eine Gängelei? Zitat Da gibt es noch den Parameter -Skip. Wo? Zitat Leider fehlt mir das KnowHow für das einbauen in das Objekt. Kannst du mich bitte nochmal unterstützen. Da ich Deinen Bildschirm nicht sehen und nicht weiß, was und wie Du's gemacht hast, musst Du jetzt mir helfen, Dir zu helfen. Und Du hilfst damit vielleicht auch anderen, die ein ähnliches Problem haben. Also zeig mal Deinen Code, wie Du ihn jetzt hast. bearbeitet 14. Dezember 2019 von BOfH_666 Zitieren Link zu diesem Kommentar
wmessmer 0 Geschrieben 14. Dezember 2019 Autor Melden Teilen Geschrieben 14. Dezember 2019 Anbei der aktuelle Code: $Header = @( 'szIdentNr', 'szGeraeteNr', 'sGrpNr', 'szBezeichnung', 'sKlassifizierung', 'sPruefOrtBez', 'dtPruefTermin', 'dtLastPruefTermin', 'dwMaxMessungen' ) Import-Csv $in_file -Delimiter ';' -Header $Header | Select-Object -Property 'szIdentNr', 'szGeraeteNr', 'sGrpNr', 'szBezeichnung', 'sKlassifizierung', 'sPruefOrtBez', @{ Name = 'dtPruefTermin'; Expression = { (Get-Date $_.dtPruefTermin -Format 'yyyyMMdd')} }, 'dtLastPruefTermin', @{ Name = 'dwMaxMessungen'; Expression = {'DefaultWert'} }| Export-CSV -Path $outtxt_file -Skip 1 -NoTypeInformation -Delimiter ";" cat $outtxt_file | %{$_ -replace "`"",""} > $outdat_file sorry, ohne Skip Korrekte Zeile: Export-CSV -Path $outtxt_file -NoTypeInformation -Delimiter ";" Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 14. Dezember 2019 Melden Teilen Geschrieben 14. Dezember 2019 (bearbeitet) Hmmm ... ich empfehle Dir dringeds, DIr die Grundlagen von Powershell anzueignen. Solltest Du vorhaben, beruflich noch ne Weile in Windows-Umgebungen unterwegs zu sein, lohnt sich das für die Zukunft auf jeden Fall für Dich. Hier im Forum bitte Code als Code formatieren. Und bitte in Skripten und in Foren keine Aliasse verwenden. Hier also die nächste Literaturempfehlung: The Unofficial PowerShell Best Practices and Style Guide. Wenn Du die Hilfe für Export-Csv gelesen hättest, hättest Du gewusst, dass dieses cmdlet keinen Parameter -Skip hat. $in_file = "D:\Daten\qsys\Powershell\NC_PM\NC_PM.csv" $out_file = "D:\Daten\qsys\Powershell\NC_PM\NC_PM_OUT.csv" $Header = @( 'szIdentNr', 'szGeraeteNr', 'sGrpNr', 'szBezeichnung', 'sKlassifizierung', 'sPruefOrtBez', 'dtPruefTermin', 'dtLastPruefTermin', 'dwMaxMessungen' ) Import-Csv $in_file -Delimiter ';' -Header $Header | Select-Object -Property 'szIdentNr', 'szGeraeteNr', 'sGrpNr', 'szBezeichnung', 'sKlassifizierung', 'sPruefOrtBez', @{ Name = 'dtPruefTermin'; Expression = { (Get-Date $_.dtPruefTermin -Format 'yyyyMMdd') } }, 'dtLastPruefTermin', @{ Name = 'dwMaxMessungen'; Expression = { 'DefaultWert' } } | ConvertTo-Csv -NoTypeInformation -Delimiter ';' | ForEach-Object { $_ -replace '"' } | Select-Object -Skip 1 | Out-File $out_file bearbeitet 14. Dezember 2019 von BOfH_666 Zitieren Link zu diesem Kommentar
wmessmer 0 Geschrieben 15. Dezember 2019 Autor Melden Teilen Geschrieben 15. Dezember 2019 Hat jetzt super funktioniert. Herzlichen Dank für Deine Unterstützung. vor 13 Stunden schrieb BOfH_666: Hmmm ... ich empfehle Dir dringeds, DIr die Grundlagen von Powershell anzueignen. Solltest Du vorhaben, beruflich noch ne Weile in Windows-Umgebungen unterwegs zu sein, lohnt sich das für die Zukunft auf jeden Fall für Dich. Hatte jetzt mal eine Anforderung, bin sonst mit AWK unterwegs. ...denke aber das ich PS langfristig benötige. vor 13 Stunden schrieb BOfH_666: Hier im Forum bitte Code als Code formatieren. Was meinst du genau mit formatieren? Meinst du das einrücken des Codes? Zitieren Link zu diesem Kommentar
BOfH_666 577 Geschrieben 15. Dezember 2019 Melden Teilen Geschrieben 15. Dezember 2019 vor einer Stunde schrieb wmessmer: Was meinst du genau mit formatieren? Du markierst den Code den Du in einen Beitrag eingefügt hast und klickst dann einfach in der Formatierungsleiste auf </> . vor einer Stunde schrieb wmessmer: bin sonst mit AWK unterwegs. AWK? Dieses AWK -> https://de.wikipedia.org/wiki/Awk ?? Zitieren Link zu diesem Kommentar
wmessmer 0 Geschrieben 15. Dezember 2019 Autor Melden Teilen Geschrieben 15. Dezember 2019 vor 7 Stunden schrieb BOfH_666: Dieses AWK -> https://de.wikipedia.org/wiki/Awk ?? Ja, dieses awk. Habe PS eingesetzt da der Kunde keine zusätzliche Fremdsoftware aktzeptiert hat. Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.