M. Kurz
unread,Aug 31, 2010, 10:33:29 AM8/31/10Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to InterSystems: Ensemble in Healthcare
Hi,
I manage my lookup table in my old format, which is plain text files
with # lines as comments.
Because I really need the comments and versioning, I will keep
managing the mapping tables as files until Ensemble supports
comments and versioning. Unfortunately, I cannot do the same
for data conversions.
Maybe someone can use some part of the code.
best regards,
Michaela
Example for mapping table file:
-----------------------------------
# mapping table from event to ZBE type
# Copyright (C) 2002 by
# Klinikum der Universitaet Regensburg
# Rechenzentrum DV-med
# Franz-Josef-Strauss-Allee 11
# D-93042 Regensburg
#
#
# mit Bezug
# Aufnahme stationaer
# Aufnahmedaten anlegen Ist
NP11I0|INSERT
# Aufnahmedaten aendern Ist
NP12I0|UPDATE
# Aufnahmedaten stornieren Ist
NP12IS|DELETE
#
# Derzeit wird NICHT JEDE Bewegung an MEDOS geliefert, sondern
# nur DIE Bewegungen, auf die man sich später evtl. beziehen will.
# Fall und Operation anlegen
# (normal)
NP3600|INSERT
# Kurzaufnahme
NP36K0|INSERT
# Notaufnahme
NP36N0|INSERT
-------------------------------
ClassMethod ImportLookupTableAsText(pFileName As %String, pTable As
%String) As %Status
{
/*
** if table is not supplied
** derive name from filename
** use capital letters instead of _
*/
if pTable '= "" {
Set table = pTable
}
else {
Set i = 0
Set table = ""
Set piece = ""
Set filename = pFileName
while $F(filename, "\") '= 0 {
Set filename = $E(filename,2,*)
}
do {
Set i = i + 1
Set piece = $ZCVT($P(filename, "_", i),"W")
Set table = table_piece
} while piece '= ""
Set table = $P(table, ".", 1)
write "table is: "_table,!
}
Set tSC = $$$OK
Set first = 1
Set f = ##class(%FileCharacterStream).%New()
Set f.Filename = pFileName
do {
set line=f.ReadLine()
write line
write !
if '..StartsWith(line, "#") {
write line
write !
Set key = $P(line,"|",1)
if key '= "" {
// write "key is: "_key
// write !
Set value = $P(line,"|",2)
// write "value is: "_value
// write !
if ..%ExistsId(table_"||"_key) {
write "double entry"_key_"="_value_"in table "_table,!
}
if first = 1 {
Kill ^Ens.LookupTable(table)
Set first = 0
}
Set tRecord = ##class(Ens.Util.LookupTable).%New()
Set tRecord.TableName = table
Set tRecord.KeyName = key
Set tRecord.DataValue = value
Set tSC = tRecord.%Save()
if $$$ISERR(tSC) {
write "error saving entry "_key_", zapping table "_table,!
Kill ^Ens.LookupTable(table)
}
Quit:$$$ISERR(tSC)
}
}
} while 'f.AtEnd
do f.Rewind()
// If ..%ExistsId(entry.TableName_"||"_entry.KeyName) {
// Remove duplicate
// Do ..%DeleteId(entry.TableName_"||"_entry.KeyName)
}
ClassMethod ImportLookupTablesAsText(pDirectory As %String, pFileMask
As %String) As %Status
{
Set rs = ##class(%ResultSet).%New("%File:FileSet")
do rs.Prepare()
do rs.Execute(pDirectory, pFileMask)
while rs.Next() '= 0 {
Set filename = rs.GetData(1)
write "Importing "_filename_" ... "
// Set tSC = ..ImportLookupTableAsText(filename, "")
do ..ImportLookupTableAsText(filename, "")
// if $$$ISERR(tSC) {
//write !,"An error occured. Skipping file: "_filename
// }
write "Done.",!
}
quit $$$OK
}
ClassMethod ImportAllFixedSegmentsFromFile(pFileName As %String) As
%Status
{
if pFileName = "" {
set tSC=$$$ERROR(5001,"No file to import segments from")
quit tSC
}
Set f = ##class(%FileCharacterStream).%New()
Set f.Filename = pFileName
// auf existenz abfragen
Set dir = ""
if (pFileName["\") {
set pos = 1
set lastpos = 1
do {
set lastpos = pos
set pos = $F(pFileName, "\", pos)
set lastpos = lastpos - 1
write "pos is"_pos,!
}
while pos '= 0
set dir = $E(pFileName, 1, lastpos)
$$$TRACE("dir is "_dir)
}
do {
set line=f.ReadLine()
if '..StartsWith(line, "#") {
Set seg = $P(line,"|",1)
Set len = $P(line,"|",3)
if len = "" {
$$$TRACE("skipping segment "_seg)
continue
}
Set desc = $P(line,"|",4)
Set file = $P(line,"|",5)
if file = "" {
$$$TRACE(seg_" has no description file, skipping")
continue
}
Set file = $S($F(file, "/", 1)>0:$P(file,"/",2),1:file)
Set file = $S($F(file, "\", 1)>0:$P(file,"\",2),1:file)
Set file = dir_file
write "Reading "_seg_" from file "_file_".",!
Set tSC = ..ImportFixedSegmentFromFile(seg, file)
}
} while 'f.AtEnd
do f.Rewind()
write "Done.",!
quit $$$OK
}