06-13-2017 04:40 PM - edited 06-13-2017 04:43 PM
OK, so maybe this is just a case of moving my thinking into the DIAdem world, but I need help here to understand something.
Let's say I open a file of data (file_a). Then, I open a second file (file_b) that I am using to store some channel cross reference data (sometimes file_a comes from test cell1, test cell2, or test cell3, so the names of channels vary. I have a table to look that up. There are other groups with other functions.).
Now, when I'm all done using the information that was loaded by opening file_b, I can't simply close file_b. In fact, file_b never appeared in the portal, DIAdem just took all the stuff that was in file_b and put it in with the data groups from file_a.
Let's further say I have no idea how many data groups will be loaded when I open file_b, nor what they might be named, as the amount of stuff I need to look up changes over time. So I have no easy way to call out which data groups to close. But I want them closed. I want to save file_a, with the work done, and I don't want file_b's contents saved with it. Can it be done???
(PS I tried registering file_b instead of opening it but when I saved file_a at the end of the process the new data groups went into the saved file anyway.)
Solved! Go to Solution.
06-14-2017 01:43 AM
It is like you figured out.
DIAdem does not work on a file but adds data to the internal structure.
If a file is saved the internal data is saved. This fits quiet well in a world of generating repetive reports but does not match your use case of working on a single file.
However the information where a chanel comes from is stored at each channel, so it is possible to figure out what groups to remove in a script.
Lets fill the portal with different data
Option Explicit
data.Root.Clear
' load two files
DataFileLoad ProgramDrv & "examples\Data\Crash.tdm"
DataFileLoad ProgramDrv & "examples\Data\DIESEL.tdm"
' create a group during processing
call data.root.ChannelGroups.Add("created").Channels.Add("Created",DataTypeFloat64)
The following scrpt will remove groups that do not belong to the file of the first group
Option Explicit
call RemoveAllGroupsNotOfFile(Data.Root.ChannelGroups(1).Channels(1), false)
Sub RemoveAllGroupsNotOfFile(byRef refChnO, byval delNonLoaded)
dim refFilePath : refFilePath = refChnO.Properties("sourcedatafilepath").Value & refChnO.Properties("sourcedatafilename").Value
dim i : for i = data.Root.ChannelGroups.Count to 1 step -1
dim grpO : set grpO = data.Root.ChannelGroups(i)
if grpO.Channels.Count > 0 then
dim grpFilePath : grpFilePath = grpO.Channels(1).Properties("sourcedatafilepath").Value & grpO.Channels(1).Properties("sourcedatafilename").Value
if 0 <> strcomp(refFilePath, grpFilePath, VBTextCompare) then
if "" <> grpFilePath or delNonLoaded then
data.Root.ChannelGroups.Remove(i)
end if
end if
end if
Next
end sub
The second parameter is used to determine if generated data should also be removed.
P.S.: The behavior does not really differ from other programs but the default is different. DIAdem merges files automatically at load time instead of opening a second DIAdem instance while other applications will open a second instance if new file is opened.
06-14-2017 10:40 AM
Yeah that will do the job. I already knew when I was asking the question that the answer wouldn't look like what I was used to, but rather would look something like this, with a for loop examining the parts and deciding which ones to eliminate. Thanks.