none
Power Shell Schleife mit Denkfehler? RRS feed

  • 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
    Donnerstag, 11. April 2013 09:16

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
    Donnerstag, 11. April 2013 11:37
  • 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".

    Donnerstag, 11. April 2013 10:16
    Moderator

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
    Donnerstag, 11. April 2013 10:15
  • 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".

    Donnerstag, 11. April 2013 10:16
    Moderator
  • 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
    Donnerstag, 11. April 2013 10:39
  • 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
    Donnerstag, 11. April 2013 10:51
  • HAllo

    ich weiß schon genau welche Spalten das sein sollen, nur die Anzahl variiert eben in den Dateien....

    das sind alle Spalten die mit dem Namen beginnen      Medik-OnEin...

    

    Donnerstag, 11. April 2013 10:59
  • Hm, kann mir sonst keiner helfen ???

    VG

    Donnerstag, 11. April 2013 11:31
  • 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
    Donnerstag, 11. April 2013 11:37
  • :-) cool, Danke

    ich kauf mir jetzt ein Fachbuch, gibts da auch eine möglichkeit bestimmte Felder definitiv nicht mitzunehmen, also eine Negierung oder sowas ?

    Donnerstag, 11. April 2013 11:45
  • 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
    Donnerstag, 11. April 2013 13:52
  • 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
    Donnerstag, 11. April 2013 14:17