Powershell - HL7 - Export nach CSV
Folgendes Problem.
Es geht um das Einlesen einer HL7 Datei, die zu einer CSV-Datei exportiert/umgewandelt werden soll.
Die einzulesende HL7-Datei sieht so aus.
Endergebnis soll sein, dass die von HL7 zu CSV umgewandelte Datei so aussieht:
Bisher bin ich soweit, dass ich die HL7 einlesen kann, aus einem Ordner mit ggf. mehreren Dateien.
Wo ich aktuell noch Probleme habe, ist das Umwandeln, der Export nach CSV.
Meine Fehler sind aktuell noch:
1) Der Export nach csv klappt zwar soweit, jedoch schreibt er den Header nicht in die erste Zeile?
2) Er sind immer neue Zeilen vorhanden
die csv-Datei sieht aktuell so aus
IST-Zustand
SOLL-Zustand
3) Das "^" Zeichen müsste als "|" umgewandelt werden, sodass ein weiteres Feld entsteht.
Kann mir hier jemand Tipps geben?
Hier mein bisheriger Code. Bitte von der einen, oder anderen zusätzlichen Zeile nicht verwirren lassen, da sie später auch Bedeutungen haben soll.
Es geht um das Einlesen einer HL7 Datei, die zu einer CSV-Datei exportiert/umgewandelt werden soll.
Die einzulesende HL7-Datei sieht so aus.
MSH|^~\&|LAM|ATEST|BTEST|CTEST|201612230908||ORM^O01||P|2.4
PID|||0080012103||SC02^Lab Integration||19750501|M
PV1|||LAB||||||||||||||||00000504970000
Endergebnis soll sein, dass die von HL7 zu CSV umgewandelte Datei so aussieht:
F_STUDYNAM;F_BARCODE;F_SCREENNO;F_SUBJECT;F_PERIOD;F_TIMECODE;F_SAMPTYPE;F_LBLCODE;F_EXTSAMP
1234;1234750001;;RNR001;Per 1;00:00:00;PK sample;;
Lab Integration;0080012103;;SC02;201612230908;00000504970000;;
Bisher bin ich soweit, dass ich die HL7 einlesen kann, aus einem Ordner mit ggf. mehreren Dateien.
Wo ich aktuell noch Probleme habe, ist das Umwandeln, der Export nach CSV.
Meine Fehler sind aktuell noch:
1) Der Export nach csv klappt zwar soweit, jedoch schreibt er den Header nicht in die erste Zeile?
2) Er sind immer neue Zeilen vorhanden
die csv-Datei sieht aktuell so aus
IST-Zustand
"SC02^Lab Integration"
"0080012103"
SOLL-Zustand
F_STUDYNAM;F_BARCODE;F_SCREENNO;F_SUBJECT;F_PERIOD;F_TIMECODE;F_SAMPTYPE;F_LBLCODE;F_EXTSAMP
1234;1234750001;;RNR001;Per 1;00:00:00;PK sample;;
Lab Integration;0080012103;;SC02;201612230908;00000504970000;;
3) Das "^" Zeichen müsste als "|" umgewandelt werden, sodass ein weiteres Feld entsteht.
Kann mir hier jemand Tipps geben?
Hier mein bisheriger Code. Bitte von der einen, oder anderen zusätzlichen Zeile nicht verwirren lassen, da sie später auch Bedeutungen haben soll.
$filesIN = "C:\temp\HL7Messages\*.HL7"
# Outputfile
$fileOUT = "C:\temp\HL7_csv\final.csv"
$src = (Get-ChildItem $filesIN)[1].FullName
$search_name1 = ""
$search_name2 = ""
$search_name3 = ""
$search_name4 = ""
# take hl7 message as string, convert to posh obj
function hl7-to-object {
param($src)
# go from hl7 to powershell array of objects
$msg = @()
$cursorCount = 0
$src | Foreach {
$split = $_.Split("|")
$nodeName = $split
$properties = @()
$split | select -skip 1 | foreach {
$properties += $_
}
$object = New-Object psobject
$object | Add-Member –membertype noteproperty –Name HL7Pos –Value $cursorCount
$object | Add-Member –membertype noteproperty –Name Segment –Value $nodeName
$object | Add-Member –membertype noteproperty –Name Fields –Value $properties
$msg += $object
$cursorCount += 1
}
return $msg
}
# take posh object formed from hl7 and convert to hl7 string
function object-to-hl7 {
param($msgObj)
# convert back to HL7
$msgSrc = @()
$msgObj | foreach {
$msgSrc += $_.Segment + "|" + ($_.Fields -join "|")
}
return ($msgSrc -join "`r`n")
}
$msg = hl7-to-object((get-content $src))
$MSH = ($msg | where {$_.Segment -eq "MSH"} | select -First 1)
$PV1_B = ($msg | where {$_.Segment -eq "PV1"} | select -Skip 1)
#$PV1_B.HL7Pos
($msg | where {$_.HL7Pos -eq $PV1_B.HL7Pos} | select -First 1)
(Get-ChildItem $filesIN) | foreach {
$MSH_output1 = (($msg | where {$_.Segment -eq "MSH"} | select -First 1).Fields[1])
$MSH_output2 = (($msg | where {$_.Segment -eq "MSH"} | select -First 1).Fields[2])
$MSH_output3 = (($msg | where {$_.Segment -eq "MSH"} | select -First 1).Fields[3])
$MSH_output4 = (($msg | where {$_.Segment -eq "MSH"} | select -First 1).Fields[4])
$MSH_output5 = (($msg | where {$_.Segment -eq "MSH"} | select -First 1).Fields[5])
$MSH_output6 = (($msg | where {$_.Segment -eq "MSH"} | select -First 1).Fields[6])
$MSH_output7 = (($msg | where {$_.Segment -eq "MSH"} | select -First 1).Fields[7])
$MSH_output8 = (($msg | where {$_.Segment -eq "MSH"} | select -First 1).Fields[8])
$MSH_output9 = (($msg | where {$_.Segment -eq "MSH"} | select -First 1).Fields[9])
$MSH_output10 = (($msg | where {$_.Segment -eq "MSH"} | select -First 1).Fields[10])
$PID_output1 = (($msg | where {$_.Segment -eq "PID"} | select -First 1).Fields[2])
$PID_output2 = (($msg | where {$_.Segment -eq "PID"} | select -First 1).Fields[3])
$PID_output3 = (($msg | where {$_.Segment -eq "PID"} | select -First 1).Fields[4])
$PID_output4 = (($msg | where {$_.Segment -eq "PID"} | select -First 1).Fields[5])
$PID_output5 = (($msg | where {$_.Segment -eq "PID"} | select -First 1).Fields[6])
$PV1_output1 = (($msg | where {$_.Segment -eq "PV1"} | select -First 1).Fields[2])
$PV1_output2 = (($msg | where {$_.Segment -eq "PV1"} | select -First 1).Fields[3])
$msg = hl7-to-object((get-content $_))
$isSearch_Name1 = ($msg | where {($_.Segment -eq "PID") -and ($_.Fields[4] -like "*$search_name1*")} | select -First 1)
if($isSearch_Name1 -eq $null) {
write-host "Suchname $search_name1 nicht gefunden"
} else {
write-host "Suchname $search_name1 gefunden"
}
$header = "F_STUDYNAM;F_BARCODE;F_SCREENNO;F_SUBJECT;F_PERIOD F_TIMECODE;F_SAMPTYPE;F_LBLCODE;F_EXTSAMP"
$arr = @(); $arr +=$header; $arr +=$PID_output3; $arr +=$PID_output1
write-host $arr
# Objekt aus Inhalt erstellen
$obj = $arr | ConvertFrom-Csv -Delimiter ","
# Export in CSV
$obj | ConvertTo-Csv -Delimiter ";" -NoTypeInformation | select -Skip 1 | Set-Content $fileOUT
}
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 328122
Url: https://administrator.de/contentid/328122
Ausgedruckt am: 25.11.2024 um 09:11 Uhr
1 Kommentar
Zitat von @internet2107:
Meine Fehler sind aktuell noch:
1) Der Export nach csv klappt zwar soweit, jedoch schreibt er den Header nicht in die erste Zeile?
Naja, wenn manMeine Fehler sind aktuell noch:
1) Der Export nach csv klappt zwar soweit, jedoch schreibt er den Header nicht in die erste Zeile?
select -Skip 1
in Zeile 102 einbaut, kein Wunder ! Hier reicht dann stattdessen auch ein einfaches Export-CSV wenn man schon ein Object hat.
3) Das "^" Zeichen müsste als "|" umgewandelt werden, sodass ein weiteres Feld entsteht.
Stichwort .Replace('^','|')Hier mein bisheriger Code.
Muss ich jetzt nicht alles lesen, hast du ja anscheinend auch nicht :-P ... das kann von mir aus gerne jemand anderes machen.Gruß