Benutzer mit den meisten Antworten
Power Shell Schleife mit Denkfehler?

Frage
-
Hallo zusammen,
habe eine CSV Datei importiert und will aus dieser nur bestimmte spalten in eine neue CSV Datei schreiben.
Die Spaltennamen folgen einem Namensmuster (Es sind Medikamente - Namen , Mengen etc., die durchnumeriert sind).
Die anazahl der Medikamente ist grundsätzlich nicht bekannt, jedoch sind es in der aktuellen Datei 12, deswegen habe ich $medis als 12 angegeben.
leider haut das aber nicht so hin wie ich will -....
$Medikamente =Import-Csv D:\BM-3N_Export_aus_m4\Beispielprozess_BM_3N_Medikamenteneinnahme\Medikamenteneinnahme.csv -delimiter "|" $medis=12 for ($i=0; $i-le $medis; $i++){ $Medikamente |select-Object Patient,Medik-OEin-MedikamentName$i-m4,Medik-OEin-Wirkstoff1-m4,Medik-OEin-Darreichungsform1-m4,Medik-OEin-DarreichungsformTxt1-m4,Medik-OEin-Dosis1-m4,Medik-OEin-EinzeldosisEinheit1-m4, Medik-OEin-EinheitSonstiges1-m4,Medik-OEin-Frequenz1-m4,Medik-OEin-FrequenzEinheit1-m4,Medik-OEin-FrequenzSonstiges1-m4,Medik-OEin-Startdatum1-m4#day,Medik-OEin-Startdatum1-m4#month,Medik-OEin-Startdatum1-m4#year, Medik-OEin-Startdatum1-m4#hour,Medik-OEin-Startdatum1-m4#minute,Medik-OEin-SicherheitDatum1-m4 |Export-csv D:\BM-3N_Export_aus_m4\Nur_Medikamente.csv -delimiter "|" }
In der Liste nach Patient, ab Medik .... soll er die Nummerierung eben variabel halten ($i), er schreibt aber immer eine 12 ....:-(
- Bearbeitet struppi79 Donnerstag, 11. April 2013 09:19
Antworten
-
Hm, kann mir sonst keiner helfen ???
Hey, wir sind hier ehrenamtlich, unentgeltlich und in unserer Freizeit tätig. ;)
das sind alle Spalten die mit dem Namen beginnen ?Medik-OnEin...
Ok, dass ist dann eventuell auch ganz einfach, denn Select-Obeject kennt bei den Attributen auch teilqualifizierte "Suche":
Import-Csv D:\BM-3N_Export_aus_m4\Beispielprozess_BM_3N_Medikamenteneinnahme\Medikamenteneinnahme.csv -delimiter "|" | select-object Medik-OnEin* | Export-csv D:\BM-3N_Export_aus_m4\Nur_Medikamente.csv -delimiter "|"
Grüße aus Berlin schickt Robert
MVP Exchange Server- Als Antwort markiert Denniver ReiningMVP, Moderator Dienstag, 5. April 2016 20:55
-
Ich habe leider nicht ganz verstanden was genau das Problem ist, aber auf den ersten Blick hast du in deinem Code an mehreren Stellen Hash-zeichen "#". Dir ist klar das Powershell alles nach einem "#" als Kommentar betrachtet und ignoriert?
Falls das das Problem nicht löst: bitte poste eine kurze Beispiel-CSV die Importiert werden soll, sowie ein kurzes Beispiel wie das Ergebnis genau aussehen soll.
Grüße, Denniver
Blog: http://bytecookie.wordpress.com
Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".- Als Antwort markiert Denniver ReiningMVP, Moderator Dienstag, 5. April 2016 20:55
Alle Antworten
-
>habe eine CSV Datei importiert und will aus dieser nur bestimmte spalten in eine neue CSV Datei schreiben.
Also ALLE Zeilen, aber nur bestimmte Spalten?
Das geht viel einfacher!
Import-Csv xxxxx | Select-Object aaa,bbb,ccc | export-csv zzzz
Deine "Schleife" schreibt 12 mal die gleiche Datei mit dem gleichen Inhalt!
Ansonst definier bitte genauer, WELCHE Daten Du aus der Anfangs-CSV-Datei haben willst.
Grüße aus Berlin schickt Robert
MVP Exchange Server -
Ich habe leider nicht ganz verstanden was genau das Problem ist, aber auf den ersten Blick hast du in deinem Code an mehreren Stellen Hash-zeichen "#". Dir ist klar das Powershell alles nach einem "#" als Kommentar betrachtet und ignoriert?
Falls das das Problem nicht löst: bitte poste eine kurze Beispiel-CSV die Importiert werden soll, sowie ein kurzes Beispiel wie das Ergebnis genau aussehen soll.
Grüße, Denniver
Blog: http://bytecookie.wordpress.com
Hilf mit und markiere hilfreiche Beiträge als "Hilfreich" und Beiträge die deine Frage ganz oder teilweise beantwortet haben als "Antwort".- Als Antwort markiert Denniver ReiningMVP, Moderator Dienstag, 5. April 2016 20:55
-
Hm Danke voerst
also die Datei hat momentan ca. 270 Zeilen und 225 Spalten. Es sollen alle zeilen Exportiert werden aber eben nur bestimmte Spalten.
Die zu exportierenden Spalten sind Medikamente die durchnummeriert sind. Leider ist nicht in jeder Datei die Gleiche Anzahl von Medikamenten gegeben, das Heisst mal sind es 7 mal aber auch mehr....
Die Lösung von Robert ist gut aber ich weiß nie genau wie viele Medikamente aufgeführt sind...
Und das mit der # habe ich nicht bedacht, ....
Patient Dokument Container Erfassungsdatum Erfassungsdatum (Container) Container Index Medik-OEin-KeineMedikamente-m4#0 Medik-OEin-MedikamentName1-m4 Medik-OEin-Wirkstoff1-m4 Medik-OEin-Darreichungsform1-m4 jkgj MTJF722J8 4676 19.10.2012 11:27 19.10.2012 11:27 0 hujz M5UJ38RY5 2083 22.05.2012 12:11 22.05.2012 12:11 0 rjgded M03PJYFR9 5809 02.11.2012 12:28 02.11.2012 12:28 1 tzjhrj M4M743YP3 2724 13.07.2012 09:09 13.07.2012 09:09 0 swtrgre MNEYN0YJ7 4328 19.10.2012 10:54 19.10.2012 10:54 0 0 LAMUNA 30 DESOGESTREL 1
- Bearbeitet struppi79 Donnerstag, 11. April 2013 10:40
-
Die zu exportierenden Spalten sind Medikamente die durchnummeriert sind. Leider ist nicht in jeder Datei die Gleiche Anzahl von Medikamenten gegeben, das Heisst mal sind es 7 mal aber auch mehr....
Die Lösung von Robert ist gut aber ich weiß nie genau wie viele Medikamente aufgeführt sind...Hmmm.... Wenn DU schon nicht weißt, wie viele Spalten drin sind und welche Du brauchst, wie soll es Dein ein Script wissen?
Zuerst musst Du also mal vollkommen unabhängig eine Programmiersprache die Anforderungen definieren.
Das kann sein "alle Spalten ab Spalte X" oder alle Spalten, die "Medik" beinhalten.
Daraus kann man dann Script basteln. Umgekehrt geht meistens schief. ;)
Grüße aus Berlin schickt Robert
MVP Exchange Server -
Hm, kann mir sonst keiner helfen ???
Hey, wir sind hier ehrenamtlich, unentgeltlich und in unserer Freizeit tätig. ;)
das sind alle Spalten die mit dem Namen beginnen ?Medik-OnEin...
Ok, dass ist dann eventuell auch ganz einfach, denn Select-Obeject kennt bei den Attributen auch teilqualifizierte "Suche":
Import-Csv D:\BM-3N_Export_aus_m4\Beispielprozess_BM_3N_Medikamenteneinnahme\Medikamenteneinnahme.csv -delimiter "|" | select-object Medik-OnEin* | Export-csv D:\BM-3N_Export_aus_m4\Nur_Medikamente.csv -delimiter "|"
Grüße aus Berlin schickt Robert
MVP Exchange Server- Als Antwort markiert Denniver ReiningMVP, Moderator Dienstag, 5. April 2016 20:55
-
Probiers mal hiermit:
(funkt sogar mit Wildcards)$pattern = "Erfassungsdatum" $csv = Import-Csv "D:\BM-3N_Export_aus_m4\Beispielprozess_BM_3N_Medikamenteneinnahme\Medikamenteneinnahme.csv" -Delimiter "|" $cols = $csv | gm | Where{$_.Name -notlike $pattern -AND $_.Membertype -eq "NoteProperty"} $csv | Select-Object ($cols | Foreach{$_.Name}) | Export-Csv "D:\BM-3N_Export_aus_m4\Test.csv" -delimiter "|" -NoType
Das geht sicher auch leichter...
lg speedy
- Bearbeitet speedcar343 Donnerstag, 11. April 2013 13:53
-
Hm geht auch, aber bei deiner Lösung schiebt er mir alle Medikamentennamen von 1-12 und wirkstoffe etc. hintereinander ....
momentan habe ich eher das Problem dass in der neuen CSV der Container index (1) als Datum 01.01.1900 dargestellt wird...
Wie verhält sich das denn wenn ich beim Spaltennamen ein Leerzeichen zwischendrin habe?
- Bearbeitet struppi79 Donnerstag, 11. April 2013 14:18