Parse string to tree structure (solved)
Re: Parse string to tree structure
That's nice grindstone.
I hope your little friend returns this Spring.
I hope your little friend returns this Spring.
Re: Parse string to tree structure
I changed my version, but it still crashes on Windows. It seems I cannot use redim. https://freebasic.net/wiki/wikka.php?wakka=KeyPgredim says:
"Using Redim within a member procedure with an array that contains the instance of the object class is undefined, and will [hopefully] result in horrible crashes (if array data are shifted in memory, the This reference becomes incoherent, similarly to a dangling pointer)."
So, re-write to pointers and classic memory allocation...
"Using Redim within a member procedure with an array that contains the instance of the object class is undefined, and will [hopefully] result in horrible crashes (if array data are shifted in memory, the This reference becomes incoherent, similarly to a dangling pointer)."
So, re-write to pointers and classic memory allocation...
Code: Select all
function countInStr(text as string, char as string) as integer
dim as integer count = 0
for i as integer = 0 to len(text) - 1
if text[i] = asc(char) then count += 1
next
return count
end function
'-------------------------------------------------------------------------------
type tree_fwd as tree_type 'forward declaration
type sub_tree
dim as string path
dim as tree_fwd ptr pChild
end type
type tree_type
dim as string item(any)
dim as sub_tree subTree(any)
declare sub addItem(objectStr as string, sepChar as string)
declare sub show(depth as integer = 0)
declare sub cleanup()
end type
'object = item or tree
sub tree_type.addItem(objectStr as string, sepChar as string)
dim as integer i, j
if objectStr[0] <> asc(sepChar) then
print "Fail: Bad input"
exit sub
end if
if countInStr(objectStr, sepChar) = 1 then
dim as string itemStr = mid(objectStr, 2) 'all after "/"
dim as integer ub = ubound(item)
redim preserve item(ub + 1)
'find insert location
for i = 0 to ub
if itemStr < item(i) then exit for
next
'move other items below
for j = ub to i step -1
item(j + 1) = item(j)
next
'insert new item
item(i) = itemStr
else
dim as integer nextSepPos = instr(2, objectStr, sepChar)
dim as string pathStr = mid(objectStr, 2, nextSepPos - 2)
dim as string remObjStr = mid(objectStr, nextSepPos)
for i = 0 to ubound(subTree)
if subTree(i).path = pathStr then exit for
next
if i <= ubound(subTree) then 'match found
subTree(i).pChild->addItem(remObjStr, sepChar)
else
'add sub tree
dim as integer ub = ubound(subTree)
redim preserve subTree(ub + 1)
'find insert location
for i = 0 to ub
if pathStr < subTree(i).path then exit for
next
'move other items below
for j = ub to i step -1
subTree(j + 1) = subTree(j)
next
'insert new item
subTree(i).path = pathStr
subTree(i).pChild = allocate(sizeof(tree_type))
subTree(i).pChild->addItem(remObjStr, sepChar)
end if
end if
end sub
sub tree_type.show(depth as integer = 0)
dim as string indentStr = string(depth * 2, " ") + "+ "
for i as integer = 0 to ubound(item)
color 14, 0 'item in yellow
print indentStr & item(i)
color 15, 0
next
for i as integer = 0 to ubound(subTree)
color 10, 0 'path in green
print indentStr & subTree(i).path
color 15, 0
subTree(i).pChild->show(depth + 1)
next
end sub
sub tree_type.cleanup()
for i as integer = 0 to ubound(subTree)
subTree(i).pChild->cleanup()
deallocate(subTree(i).pChild)
next
erase item, subTree
end sub
'-------------------------------------------------------------------------------
dim as string inputStr(...) = { _
"/itemE",_
"/path1/path2/itemA", _
"/path1/path2/itemC", _
"/path1/path2/itemB", _
"/path2/path2/itemX", _
"/path4/path5/path6/path7/itemQ", _
"/path4/path5/path8/path7/itemR", _
"/path4/path5/path6/path7/itemP", _
"/path3/itemC", _
"/path3/itemC", _
"/itemD"}
dim as tree_type tree
for i as integer = 0 to ubound(inputStr)
tree.addItem(inputStr(i), "/")
next
tree.show()
tree.cleanup()
tree.show()
print "end"
sleep
Re: Parse string to tree structure
No, you are not in such a situation (seeing your code at viewtopic.php?p=269973#p269973), and so the error does not come from that.badidea wrote:I changed my version, but it still crashes on Windows. It seems I cannot use redim. https://freebasic.net/wiki/wikka.php?wakka=KeyPgredim says:
"Using Redim within a member procedure with an array that contains the instance of the object class is undefined, and will [hopefully] result in horrible crashes (if array data are shifted in memory, the This reference becomes incoherent, similarly to a dangling pointer)."
But on the other hand, you cannot only allocate (and deallocate at end) memory for creating an instance of tree_type, because this instance must also be built (and destroyed at the end), because it contains three descriptors of dynamic arrays:
- After:
pSubTree(ub + 1) = allocate(sizeof(tree_type))
add:
pSubTree(ub + 1)->constructor() - Before:
deallocate(pSubTree(i))
add:
pSubTree(i)->destructor()
- Instead of:
pSubTree(ub + 1) = allocate(sizeof(tree_type))
use:
pSubTree(ub + 1) = new tree_type - Instead of:
deallocate(pSubTree(i))
use:
delete pSubTree(i)
Your latest version (just above) also crashes on my PC for a similar reason (see tree_type and sub_tree) => similar change (to call the constructors/destructors).
Re: Parse string to tree structure
My two previous versions don't work properly.
This is now my 3rd and maybe last attempt:
Edit: still not working properly :-(
٩(●̮̮̃•̃)۶
This is now my 3rd and maybe last attempt:
Code: Select all
#Define LF Chr(10)
#Define CRLF Chr(13) & Chr(10)
#Define INDENT " "
#Define PREFIX "+ "
Dim Shared As String * 255 u
For n As Long = 0 To 255
u[n] = Iif(n < 91 Andalso n > 64, n + 32, n) 'lookup string
Next
Sub QuicksortUp(low As String Ptr,high As String Ptr) 'by dodicat
If (high - low <= 1) Then Return
Var J = low + 1, I = J, lenb = Cast(Integer Ptr, low)[1], lena=0
While J <= high
lena = Cast(Integer Ptr, J)[1] '=Len(*a)
If lena > lenb Then lena = lenb
For n As Long = 0 To lena - 1
If u[(J)[0][n]] < u[(low)[0][n]] Then Swap *J, *I : I += 1 : Exit For
If u[(J)[0][n]] > u[(low)[0][n]] Then Exit For
Next
J + =1
Wend
J = I - 1 : Swap *low, *J
QuicksortUp(low, J)
QuicksortUp(I, high)
End Sub
Sub StringSplit(sString As String, aResult() As String, sDelimiter As String = "/")
Dim As Uinteger j = 0, i, ii = 1
If Left(sString, 1) = sDelimiter Then sString = Ltrim(sString, "/")
For i = 1 To Len(sString)
If Mid(sString, i, 1) = sDelimiter Then
Redim Preserve aResult(Ubound(aResult) + 1)
aResult(j) = Mid(sString, ii, i - ii)
j += 1
i += 1
ii = i
End If
Next
If ii < i Then
aResult(j) = Mid(sString, ii, i - ii)
Else
Redim Preserve aResult(j - 1)
End If
End Sub
Sub PrintDirStructur(sPathes As String, sepChar As String)
ReDim As String aPathes(1000)
Dim As String char
Dim As Integer i = 1, ii = 1, c = 0, d = 0, x, y, dimx = 0
While i <= Len(sPathes) 'loop all characters
char = Mid(sPathes, i, 1)
If char = sepChar Then d+= 1 'current depth
If Asc(char) = 10 Then 'LF
aPathes(c) = Mid(sPathes, ii, i - ii) 'one complete line
c += 1 'line count
i += 1 'input iterator
ii = i 'previous
If dimx < d Then dimx = d 'increase max depth
d = 0 'reset current depth
Else
i += 1 'No LF
End If
Wend
If ii < i Then 'add the last line
aPathes(c) = Mid(sPathes, ii, i - ii)
Else
c -= 1 'correct line count
End If
Redim Preserve aPathes(c) 'shrink array size
QuicksortUp(@aPathes(0), @aPathes(c))
? "Input pathes sorted:"
For i = 0 To Ubound(aPathes)
? aPathes(i)
Next
?
?
? "Formatted:" : ?
?
Dim As String aTree(dimx * c, dimx - 1) 'allocate for worst case
Dim As String aLine()
Dim As Integer px, py = 0, found, yy
For i = 0 To Ubound(aPathes) 'loop all full paths
Redim aLine(0)
StringSplit(aPathes(i), aLine(), sepChar) 'split path into segments
px = 0
For x = 0 To Ubound(aLine) 'loop path segments
y = py - 1
found = 0
While y > -1
If aLine(x) = aTree(y, px) Then
If x > 0 Then
yy = py
While yy >= y
If aTree(yy, px - 1) <> "" Then Exit While
yy -= 1
Wend
If yy > y Then
found = 0
Else
found = 1
End If
Else
found = 1
End If
End If
y -= 1
Wend
If found = 1 Then
px += 1
Else
aTree(py, px) = aLine(x)
px += 1
py += 1
End if
Next
Next
Dim As String sOutput, tc, tn
For y = 0 To py
For x = 0 To Ubound(aTree, 2)
sOutput &= Iif(aTree(y, x) <> "", PREFIX + aTree(y, x), "") + INDENT
Next
sOutput &= CRLF
Next
? sOutput
End Sub
Dim As String sPathes = _
"/itemE" & LF & _
"/path1/path2/itemA" & LF & _
"/path1/path2/itemC" & LF & _
"/path1/path2/itemB" & LF & _
"/path2/path2/itemX" & LF & _
"/path4/path5/path6/path7/itemQ" & LF & _
"/path4/path5/path8/path7/itemR" & LF & _
"/path4/path5/path6/path7/itemP" & LF & _
"/path3/itemC" & LF & _
"/itemD"
PrintDirStructur(sPathes, "/")
Sleep
٩(●̮̮̃•̃)۶
Last edited by UEZ on Mar 24, 2020 15:45, edited 1 time in total.
Re: Parse string to tree structure
badidea -- From your first code.
1) create static path() and pSubTree() to avoid pointers and keep the ubounds the same for bubblesort.
2) tweak bubblesort to standard layout and sort up
3) supply a get out for recursive sub .show.
Result:
tested Win 10
1) create static path() and pSubTree() to avoid pointers and keep the ubounds the same for bubblesort.
2) tweak bubblesort to standard layout and sort up
3) supply a get out for recursive sub .show.
Result:
Code: Select all
function countInStr(text as string, char as string) as integer
dim as integer count = 0
for i as integer = 0 to len(text) - 1
if text[i] = asc(char) then count += 1
next
return count
end function
function findInList(list() as string, find as string) as integer
for i as integer = 0 to ubound(list)
if list(i) = find then return i
next
return -1
end function
sub bubbleSort(list() as string)
for i as integer = lbound(list) to ubound(list)-1
for j as integer = i+1 to ubound(list)
if list(i) > list(j) then
swap list(i), list(j)
end if
next
next
end sub
'-------------------------------------------------------------------------------
type tree_type
dim as string item(any)
static as string path(any)
static as tree_type pSubTree(any)
declare sub addItem(objectStr as string, sepChar as string)
declare sub show(depth as integer = 0)
declare sub cleanup()
end type
redim tree_type.pSubTree(0)
redim tree_type.path(0)
'object = item or tree
sub tree_type.addItem(objectStr as string, sepChar as string)
if objectStr[0] <> asc(sepChar) then
print "Fail: Bad input"
exit sub
end if
if countInStr(objectStr, sepChar) = 1 then
dim as integer ub = ubound(item)
redim preserve item(ub + 1)
item(ub + 1) = mid(objectStr, 2) 'note mid starts at 1
bubbleSort(item())
else
dim as integer nextSepPos = instr(2, objectStr, sepChar)
dim as string pathStr = mid(objectStr, 2, nextSepPos - 2)
dim as string remObjStr = mid(objectStr, nextSepPos)
dim as integer index = findInList(path(), pathStr)
if index >= 0 then
pSubTree(index).addItem(remObjStr, sepChar)
else
'add sub tree
dim as integer ub = ubound(pSubTree)
redim preserve path(ub + 1)
path(ub + 1) = pathStr
redim preserve pSubTree(ub + 1)
' pSubTree(ub + 1) = allocate(sizeof(tree_type)) <<<--- use the static array instead
pSubTree(ub + 1).addItem(remObjStr, sepChar)
'bubble sort with 2nd array
' print ubound(path),ubound(psubtree) 'ok they are equal
for i as integer = lbound(path) to ubound(path)-1 'STANDARD BUBBLESORT -- up
for j as integer = i+1 to ubound(path)
if path(i) > path(j) then
swap path(i), path(j) 'no problem, both ubounds are equal
swap pSubTree(i), pSubTree(j)
end if
next
next
end if
end if
end sub
sub tree_type.show(depth as integer = 0)
static as long start=-1
start+=1
dim as string indentStr = string(depth * 2, " ") + "+ "
for i as integer = 0 to ubound(item)
color 14, 0 'item in yellow
print indentStr & item(i)
color 15, 0
next
for j as integer = start to ubound(path)
color 10, 0 'path in green
print indentStr & path(j)
color 15, 0
pSubTree(j).show(depth + 1)
next j
end sub
sub tree_type.cleanup()
'for i as integer = 0 to ubound(pSubTree) <<-- not needed
'pSubTree(i)->cleanup()
'deallocate(pSubTree(i))
'next
erase item, path, pSubTree
end sub
'-------------------------------------------------------------------------------
dim as string inputStr(...) = { _
"/itemE",_
"/path1/path2/itemA", _
"/path1/path2/itemC", _
"/path1/path2/itemB", _
"/path2/path2/itemX", _
"/path4/path5/path6/path7/itemQ", _
"/path4/path5/path8/path7/itemR", _
"/path4/path5/path6/path7/itemP", _
"/path3/itemC", _
"/path3/itemC", _
"/itemD"}
dim as tree_type tree
for i as integer = 0 to ubound(inputStr)
tree.addItem(inputStr(i), "/")
next
tree.show()
'tree.cleanup()
print "end"
sleep
Last edited by dodicat on Mar 23, 2020 14:35, edited 2 times in total.
-
- Posts: 862
- Joined: May 05, 2015 5:35
- Location: Germany
Re: Parse string to tree structure
@badidea: With that "double - typing" you're making it unnecessary complicated. You can simply put it all in a single type...
...and avoid the sub_tree type as well as the forward referencing.
And if you make the cleanup sub a destructor it will be automatically called if you delete an instance of tree-type.
Furthermore: From my experience mixing up record access (by dot) and pointer access (by arrow) is begging for trouble. You should consequently use one method or the other. For a tree structure I would strongly recommend the pointer access.
Code: Select all
type tree_type
dim as string path
dim as string item(any)
dim as tree_type ptr pChild(any)
declare sub addItem(objectStr as string, sepChar as string)
declare sub show(depth as integer = 0)
declare sub cleanup()
end type
And if you make the cleanup sub a destructor it will be automatically called if you delete an instance of tree-type.
Furthermore: From my experience mixing up record access (by dot) and pointer access (by arrow) is begging for trouble. You should consequently use one method or the other. For a tree structure I would strongly recommend the pointer access.
Re: Parse string to tree structure
badidea -- from your second code, and agreeing with grindstone about using only one type structure, but disagreeing about using pointers.
results are the same as your first code.
Code: Select all
function countInStr(text as string, char as string) as integer
dim as integer count = 0
for i as integer = 0 to len(text) - 1
if text[i] = asc(char) then count += 1
next
return count
end function
'-------------------------------------------------------------------------------
type tree_type
as string path
dim as string item(any)
static as tree_type subTree(any)
declare sub addItem(objectStr as string, sepChar as string)
declare sub show(depth as integer = 0)
declare sub cleanup()
end type
redim tree_type.subTree(0)
'object = item or tree
sub tree_type.addItem(objectStr as string, sepChar as string)
dim as integer i, j
if objectStr[0] <> asc(sepChar) then
print "Fail: Bad input"
exit sub
end if
if countInStr(objectStr, sepChar) = 1 then
dim as string itemStr = mid(objectStr, 2) 'all after "/"
dim as integer ub = ubound(item)
redim preserve item(ub + 1)
'find insert location
for i = 0 to ub
if itemStr < item(i) then exit for
next
'move other items below
for j = ub to i step -1
item(j + 1) = item(j)
next
'insert new item
item(i) = itemStr
else
dim as integer nextSepPos = instr(2, objectStr, sepChar)
dim as string pathStr = mid(objectStr, 2, nextSepPos - 2)
dim as string remObjStr = mid(objectStr, nextSepPos)
for i = 0 to ubound(subTree)
if subTree(i).path = pathStr then exit for
next
if i <= ubound(subTree) then 'match found
subTree(i).addItem(remObjStr, sepChar)
else
'add sub tree
dim as integer ub = ubound(subTree)
redim preserve subTree(ub + 1)
'find insert location
for i = 0 to ub
if pathStr < subTree(i).path then exit for
next
'move other items below
for j = ub to i step -1
subTree(j + 1) = subTree(j)
next
'insert new item
subTree(i).path = pathStr
' subTree(i).pChild = allocate(sizeof(tree_type))
subTree(i).addItem(remObjStr, sepChar)
end if
end if
end sub
sub tree_type.show(depth as integer = 0)
static as long start=-1
start+=1
dim as string indentStr = string(depth * 2, " ") + "+ "
for i as integer = 0 to ubound(item)
color 14, 0 'item in yellow
print indentStr & item(i)
color 15, 0
next
for i as integer = start to ubound(subTree)
color 10, 0 'path in green
print indentStr & subTree(i).path
color 15, 0
subTree(i).show(depth + 1)
next
end sub
sub tree_type.cleanup()
'for i as integer = 0 to ubound(subTree)
'subTree(i).pChild->cleanup()
'deallocate(subTree(i).pChild)
'next
erase item, subTree
end sub
'-------------------------------------------------------------------------------
dim as string inputStr(...) = { _
"/itemE",_
"/path1/path2/itemA", _
"/path1/path2/itemC", _
"/path1/path2/itemB", _
"/path2/path2/itemX", _
"/path4/path5/path6/path7/itemQ", _
"/path4/path5/path8/path7/itemR", _
"/path4/path5/path6/path7/itemP", _
"/path3/itemC", _
"/path3/itemC", _
"/itemD"}
dim as tree_type tree
for i as integer = 0 to ubound(inputStr)
tree.addItem(inputStr(i), "/")
next
tree.show()
tree.cleanup()
tree.show()
print "end"
sleep
-
- Posts: 534
- Joined: Dec 02, 2011 22:51
- Location: France
Re: Parse string to tree structure
@Badidea.I feel badly placed to take a look at your approach and that is not my goal. Without offense, it seems to me that the problem you are facing is somewhat of a nature comparable to that which I was faced with during the long-term design of LZLE: the memory management of a tree. Suppose that the choice is based on a recursive technique: you are going to encapsulate the function calls according to a variable structure and with variable volumetries. This will have major consequences: perhaps avoidable loading of the stack, delegation to the system of the management of the constraints due to the fragmentation of the memory induced by this conceptual architecture, and very delicate management of the conditional outputs of loops and of the navigation . Conversely, an architecture based on linearization and logical standardization of memory blocks (we create a logical abstraction layer to be able to reduce fragmentation in two ways: linearization and "logical" reallocation) will impose serious consequences: code complexity ( which must support memory virtualization operations) and counter-intuitive logical constraints or behaviors as soon as recursive operation by essence must be simulated.
Neither of these two approaches can in itself be satisfactory. For example, in case of batch processing, the second option will be the best. Conversely, getting rid of recursion completely could prove to be prohibitively complex in some cases.
These issues are not technical but conceptual and linked to the low level intrinsic architecture (processor, memory) of the system on the one hand, to the logic of the tree on the other, which implies that whatever the technical solution implemented (object design, pointers or other), these constraints are likely to resurface in different ways depending on the technique used.
Depending on what exactly you want your code to do and how you want to design it, this task may be more or less considerable.
Neither of these two approaches can in itself be satisfactory. For example, in case of batch processing, the second option will be the best. Conversely, getting rid of recursion completely could prove to be prohibitively complex in some cases.
These issues are not technical but conceptual and linked to the low level intrinsic architecture (processor, memory) of the system on the one hand, to the logic of the tree on the other, which implies that whatever the technical solution implemented (object design, pointers or other), these constraints are likely to resurface in different ways depending on the technique used.
Depending on what exactly you want your code to do and how you want to design it, this task may be more or less considerable.
Re: Parse string to tree structure
I do know what you did, but the output is completely different here.dodicat wrote:badidea -- from your second code, and agreeing with grindstone about using only one type structure, but disagreeing about using pointers.
...
results are the same as your first code.
I could work with 1 list with a flag per entry is_dir like actual filesystems.
Re: Parse string to tree structure
@badidea: just for curiosity - does my 3rd attempt work now with you real data properly?
Re: Parse string to tree structure
Hello UEZ.
Windows
Run this in a dedicated folder, it is literally the path instructions set alive(folders and files are created in a folder tmp then tree is called then everything is deleted)
Windows
Run this in a dedicated folder, it is literally the path instructions set alive(folders and files are created in a folder tmp then tree is called then everything is deleted)
Code: Select all
Sub string_split(Byval s As String,chars As String,result() As String)
Redim result(0)
Dim As String var1,var2
Dim As Long pst,LC=Len(chars)
#macro split(stri)
pst=Instr(stri,chars)
var1="":var2=""
If pst<>0 Then
var1=Mid(stri,1,pst-1)
var2=Mid(stri,pst+LC)
Else
var1=stri
End If
If Len(var1) Then
Redim Preserve result(1 To Ubound(result)+1)
result(Ubound(result))=var1
End If
#endmacro
Do
split(s):s=var2
Loop Until var2=""
End Sub
Sub savefile(filename As String,p As String)
Dim As Integer n
n=Freefile
If Open (filename For Binary Access Write As #n)=0 Then
Put #n,,p
Close
Else
Print "Unable to save " + filename
End If
End Sub
Function Remove(Byval Text As String,Char As String) As String
Dim As Long i
For n As Long = 0 To Len(Text)-1
If Text[n]<> Asc(char) Then Text[i]= Text[n]:i+=1
Next
Return Left(Text,i)
End Function
Function FindAndReplace(InString As String,Find As String,Replace As String) As String
Dim s As String=InString
Var position=Instr(s,Find)
While position>0
s=Mid(s,1,position-1) & Replace & Mid(s,position+Len(Find))
position=Instr(position+Len(Replace),s,Find)
Wend
Return s
End Function
Function pipeout(Byval s As String="") Byref As String
Var f=Freefile
Dim As String tmp
Open Pipe s For Input As #f
s=""
Do Until Eof(f)
Line Input #f,tmp
s+=tmp+Chr(10)
Loop
Close #f
Return s
End Function
Dim As String inputStr(1 To 11) = { _
"/itemE",_
"/path1/path2/itemA", _
"/path1/path2/itemC", _
"/path1/path2/itemB", _
"/path2/path2/itemX", _
"/path4/path5/path6/path7/itemQ", _
"/path4/path5/path8/path7/itemR", _
"/path4/path5/path6/path7/itemP", _
"/path3/itemC", _
"/path3/itemC", _
"/itemD"}
Shell "mkdir "+Curdir+"\tmp"
Dim As Long p
For n As Long=1 To Ubound(inputstr)
Redim As String a()
string_split(inputstr(n),"/",a())
If Ubound(a)=1 Then
savefile("tmp/"+a(1),"Hello")
Else
For m As Long=1 To Ubound(a)-1
Shell "mkdir "+Curdir+"\tmp"+"\"+ a(m)
p=m
Next m
savefile("tmp/"+a(p)+"/"+a(p+1),"Hello")
End If
Next n
Cls
Var path=Curdir +"\tmp"
Var s=pipeout("tree /A /F "+path)
'to suit windows
s=remove(s,"|")
s=FindAndReplace(s,"---"," ")
s=FindAndReplace(s,"\"," + ")
Print s
Sleep
Shell "rmdir /S /Q "+Curdir +"\tmp"
#include "file.bi"
Print Iif(Fileexists(Curdir +"\tmp"),"Delete foldet tmp manually","OK")
Sleep
Re: Parse string to tree structure
It does not look good. Items are not grouped, see e.g. "Thermocouples" at the end.UEZ wrote:@badidea: just for curiosity - does my 3rd attempt work now with you real data properly?
Part of real data:
Code: Select all
/UPP/HpCooling/Manifold/Temperatures/Supply
/UPP/HpCooling/Manifold/Flows/Target
/UPP/Target/Cooling/WaterTempMf
/UPP/HpCooling/Manifold/Temperatures/Target
/UPP/Target/Cooling/WaterFlowMf
/UPP/HpCooling/Manifold/Flows/SourceAnode
/UPP/Plasma/Source/Anode/WaterFlow
/UPP/HpCooling/Manifold/Temperatures/SourceAnode
/UPP/Plasma/Source/Anode/WaterTemp
/UPP/HpCooling/Manifold/Flows/SourceNozzle
/UPP/Plasma/Source/Nozzle/WaterFlow
/UPP/HpCooling/Manifold/Temperatures/SourceNozzle
/UPP/Plasma/Source/Nozzle/WaterTemp
/UPP/HpCooling/Manifold/Flows/SourcePlate1
/UPP/Plasma/Source/Plate1/WaterFlow
/UPP/HpCooling/Manifold/Temperatures/SourcePlate1
/UPP/Plasma/Source/Plate1/WaterTemp
/UPP/HpCooling/Manifold/Flows/SourcePlate2
/UPP/Plasma/Source/Plate2/WaterFlow
/UPP/HpCooling/Manifold/Temperatures/SourcePlate2
/UPP/Plasma/Source/Plate2/WaterTemp
/UPP/HpCooling/Manifold/Flows/SourcePlate3
/UPP/Plasma/Source/Plate3/WaterFlow
/UPP/HpCooling/Manifold/Temperatures/SourcePlate3
/UPP/Plasma/Source/Plate3/WaterTemp
/UPP/HpCooling/Manifold/Flows/SourcePlate4
/UPP/Plasma/Source/Plate4/WaterFlow
/UPP/HpCooling/Manifold/Temperatures/SourcePlate4
/UPP/Plasma/Source/Plate4/WaterTemp
/UPP/HpCooling/Manifold/Flows/SourcePlate5
/UPP/Plasma/Source/Plate5/WaterFlow
/UPP/HpCooling/Manifold/Temperatures/SourcePlate5
/UPP/Plasma/Source/Plate5/WaterTemp
/UPP/HpCooling/Manifold/Flows/SourcePlate6
/UPP/Plasma/Source/Plate6/WaterFlow
/UPP/HpCooling/Manifold/Temperatures/SourcePlate6
/UPP/Plasma/Source/Plate6/WaterTemp
/UPP/HpCooling/Manifold/Flows/SourceCathodeHouse
/UPP/Plasma/Source/CathodeHouse/WaterFlow
/UPP/HpCooling/Manifold/Temperatures/SourceCathodeHouse
/UPP/Plasma/Source/CathodeHouse/WaterTemp
/UPP/HpCooling/Manifold/Flows/SourceCathode
/UPP/Plasma/Source/Cathode/WaterFlow
/UPP/HpCooling/Manifold/Temperatures/SourceCathode
/UPP/Plasma/Source/Cathode/WaterTemp
/UPP/LpCooling/Manifold/Temperatures/Supply
/UPP/Target/Calorimeter/WaterTempDiff
/UPP/Target/Calorimeter/HeaterVoltage
/UPP/Target/Calorimeter/HeaterCurrent
/UPP/LpCooling/Manifold/Flows/DirtyWaterUnit
/UPP/LpCooling/Manifold/Temperatures/DirtyWaterUnit
/UPP/LpCooling/Manifold/Flows/MagnetCoil1
/UPP/Magnet/Coil1/WaterFlow
/UPP/LpCooling/Manifold/Temperatures/MagnetCoil1
/UPP/Magnet/Coil1/WaterTemp
/UPP/LpCooling/Manifold/Flows/MagnetCoil2
/UPP/Magnet/Coil2/WaterFlow
/UPP/LpCooling/Manifold/Temperatures/MagnetCoil2
/UPP/Magnet/Coil2/WaterTemp
/UPP/LpCooling/Manifold/Flows/MagnetCoil3
/UPP/Magnet/Coil3/WaterFlow
/UPP/LpCooling/Manifold/Temperatures/MagnetCoil3
/UPP/Magnet/Coil3/WaterTemp
/UPP/LpCooling/Manifold/Flows/VacuumVessel
/UPP/Vacuum/Cooling/Vessel/WaterFlow
/UPP/LpCooling/Manifold/Temperatures/VacuumVessel
/UPP/Vacuum/Cooling/Vessel/WaterTemp
/UPP/LpCooling/Manifold/Flows/VacuumPorts
/UPP/Vacuum/Cooling/Ports/WaterFlow
/UPP/LpCooling/Manifold/Temperatures/VacuumPorts
/UPP/Vacuum/Cooling/Ports/WaterTemp
/UPP/LpCooling/Manifold/Flows/SourceFlange
/UPP/Vacuum/Cooling/SourceFlange/WaterFlow
/UPP/LpCooling/Manifold/Temperatures/SourceFlange
/UPP/Vacuum/Cooling/SourceFlange/WaterTemp
/UPP/LpCooling/Manifold/Flows/MagnetPS
/UPP/Magnet/PowerSupply/WaterFlow
/UPP/LpCooling/Manifold/Temperatures/MagnetPS
/UPP/Magnet/PowerSupply/WaterTemp
/UPP/LpCooling/Manifold/Flows/PlasmaPS
/UPP/Plasma/PowerSupply/WaterFlow
/UPP/LpCooling/Manifold/Temperatures/PlasmaPS
/UPP/Plasma/PowerSupply/WaterTemp
/UPP/LpCooling/Manifold/Flows/IonBeamDetector
/UPP/Diagnostics/IonBeamDet1/WaterFlow
/UPP/LpCooling/Manifold/Temperatures/IonBeamDetector
/UPP/Diagnostics/IonBeamDet1/WaterTemp
/UPP/Target/Calorimeter/CooledPower
/UPP/Target/Calorimeter/HeaterPower
/UPP/LpCooling/Manifold/Calorimeters/Target
/UPP/Target/Cooling/CooledPowerMf
/UPP/LpCooling/Manifold/Calorimeters/SourceAnode
/UPP/Plasma/Source/Anode/CooledPower
/UPP/LpCooling/Manifold/Calorimeters/SourceNozzle
/UPP/Plasma/Source/Nozzle/CooledPower
/UPP/LpCooling/Manifold/Calorimeters/SourcePlate1
/UPP/Plasma/Source/Plate1/CooledPower
/UPP/LpCooling/Manifold/Calorimeters/SourcePlate2
/UPP/Plasma/Source/Plate2/CooledPower
/UPP/LpCooling/Manifold/Calorimeters/SourcePlate3
/UPP/Plasma/Source/Plate3/CooledPower
/UPP/LpCooling/Manifold/Calorimeters/SourcePlate4
/UPP/Plasma/Source/Plate4/CooledPower
/UPP/LpCooling/Manifold/Calorimeters/SourcePlate5
/UPP/Plasma/Source/Plate5/CooledPower
/UPP/LpCooling/Manifold/Calorimeters/SourcePlate6
/UPP/Plasma/Source/Plate6/CooledPower
/UPP/LpCooling/Manifold/Calorimeters/SourceHouse
/UPP/Plasma/Source/CathodeHouse/CooledPower
/UPP/LpCooling/Manifold/Calorimeters/SourceCathode
/UPP/Plasma/Source/Cathode/CooledPower
/UPP/LpCooling/Manifold/Calorimeters/Total
/UPP/LpCooling/Manifold/Calorimeters/DirtyWaterUnit
/UPP/LpCooling/Manifold/Calorimeters/MagnetCoil1
/UPP/Magnet/Coil1/CooledPower
/UPP/LpCooling/Manifold/Calorimeters/MagnetCoil2
/UPP/Magnet/Coil2/CooledPower
/UPP/LpCooling/Manifold/Calorimeters/MagnetCoil3
/UPP/Magnet/Coil3/CooledPower
/UPP/LpCooling/Manifold/Calorimeters/VacuumVessel
/UPP/Vacuum/Cooling/Vessel/CooledPower
/UPP/LpCooling/Manifold/Calorimeters/VacuumPorts
/UPP/Vacuum/Cooling/Ports/CooledPower
/UPP/LpCooling/Manifold/Calorimeters/SourceFlange
/UPP/Vacuum/Cooling/SourceFlange/CooledPower
/UPP/LpCooling/Manifold/Calorimeters/MagnetPS
/UPP/Magnet/PowerSupply/CooledPower
/UPP/LpCooling/Manifold/Calorimeters/PlasmaPS
/UPP/Plasma/PowerSupply/CooledPower
/UPP/LpCooling/Manifold/Calorimeters/IonBeamDetector
/UPP/Diagnostics/IonBeamDet1/CooledPower
/UPP/LpCooling/Manifold/Calorimeters/Total
/UPP/Plasma/ControlSystem/UplaMode
/UPP/Plasma/ControlSystem/PlasmaShutdown
/UPP/Plasma/PowerSupply/StatusRegister
/UPP/Magnet/PowerSupply/StatusRegisterUnit12
/UPP/Magnet/PowerSupply/StatusRegisterUnit34
/UPP/Magnet/PowerSupply/StatusRegisterRack
/UPP/Plasma/ControlSystem/UplaPlcState
/UPP/Plasma/GasInlet/Cylinders/Cyl1GasType
/UPP/Plasma/GasInlet/Cylinders/Cyl2GasType
/UPP/Plasma/GasInlet/Cylinders/Cyl3GasType
/UPP/Plasma/GasInlet/Cylinders/Cyl4GasType
/UPP/Plasma/GasInlet/Cylinders/Cyl6GasType
/UPP/Plasma/PowerSupply/PS1.1/IgnitionMode
/UPP/Plasma/PowerSupply/PS1.2/IgnitionMode
/UPP/Plasma/PowerSupply/PS1.3/IgnitionMode
/UPP/Plasma/PowerSupply/PS1.1/SourceConnection
/UPP/Plasma/PowerSupply/PS1.2/SourceConnection
/UPP/Plasma/PowerSupply/PS1.3/SourceConnection
/UPP/Plasma/PowerSupply/PS1.1/TargetConnection
/UPP/Plasma/PowerSupply/PS1.2/TargetConnection
/UPP/Plasma/PowerSupply/PS1.3/TargetConnection
/UPP/Target/Bias/PositivePolarity
/UPP/Magnet/Coil1/ConnectedPsNr
/UPP/Magnet/Coil2/ConnectedPsNr
/UPP/Magnet/Coil3/ConnectedPsNr
/UPP/Plasma/GasInlet/Mfc1/ValveEnabled
/UPP/Plasma/GasInlet/Mfc2/ValveEnabled
/UPP/Plasma/GasInlet/Mfc3/ValveEnabled
/UPP/Plasma/GasInlet/Mfc4/ValveEnabled
/UPP/Plasma/GasInlet/Mfc5/ValveEnabled
/UPP/Plasma/GasInlet/Mfc7/ValveEnabled
/UPP/Plasma/GasInlet/Mfc8/ValveEnabled
/UPP/Plasma/Source/Config/FileName
/UPP/Plasma/Source/Config/Id
/UPP/Plasma/Source/Config/DrawingName
/UPP/Plasma/Source/Config/Description
/UPP/Plasma/Source/Config/Comment
/UPP/Plasma/Source/Config/NumPlates
/UPP/Plasma/ControlSystem/SourceVoltEnBits
/UPP/Plasma/ControlSystem/SourceWaterFlowEnBits
/UPP/Plasma/ControlSystem/SourceWaterTempEnBits
/UPP/Plasma/ControlSystem/ExperimentConfigFileName
/UPP/Plasma/ControlSystem/ThermocoupleEnBits
/UPP/Plasma/ControlSystem/ExpWaterFlowEnBits
/UPP/Plasma/ControlSystem/ExpWaterTempEnBits
/UPP/Plasma/Source/Gas/FlowAr
/UPP/Plasma/Source/Gas/FlowH2
/UPP/Plasma/Source/Gas/FlowD2
/UPP/Plasma/Source/Gas/FlowHe
/UPP/Plasma/Source/Gas/FlowCh4
/UPP/Plasma/Source/Gas/FlowNe
/UPP/Plasma/Source/Gas/FlowXe
/UPP/Plasma/Source/Gas/FlowN2
/UPP/Vacuum/GasInlet/FlowAr
/UPP/Vacuum/GasInlet/FlowH2
/UPP/Vacuum/GasInlet/FlowD2
/UPP/Vacuum/GasInlet/FlowHe
/UPP/Vacuum/GasInlet/FlowCh4
/UPP/Vacuum/GasInlet/FlowNe
/UPP/Vacuum/GasInlet/FlowXe
/UPP/Vacuum/GasInlet/FlowN2
/UPP/Plasma/GasInlet/Mfc1/FlowPv
/UPP/Plasma/GasInlet/Mfc2/FlowPv
/UPP/Plasma/GasInlet/Mfc3/FlowPv
/UPP/Plasma/GasInlet/Mfc4/FlowPv
/UPP/Plasma/GasInlet/Mfc5/FlowPv
/UPP/Plasma/GasInlet/Mfc6/FlowPv
/UPP/Plasma/GasInlet/Mfc7/FlowPv
/UPP/Plasma/GasInlet/Mfc8/FlowPv
/UPP/Plasma/Source/Cathode/VoltagePs
/UPP/Plasma/Source/Cathode/CurrentPs
/UPP/Target/Bias/VoltagePs
/UPP/Target/Bias/CurrentPs
/UPP/Magnet/Coil1/CurrentPv
/UPP/Magnet/Coil2/CurrentPv
/UPP/Magnet/Coil3/CurrentPv
/UPP/Vacuum/Vessel/Thermocouple/Tc1
/UPP/Vacuum/Vessel/Thermocouple/Tc2
/UPP/Vacuum/Vessel/Thermocouple/Tc3
/UPP/Vacuum/Vessel/Thermocouple/Tc4
/UPP/Vacuum/Vessel/Thermocouple/Tc5
/UPP/Vacuum/Vessel/Thermocouple/Tc6
/UPP/Plasma/Source/Voltages/Cathode
/UPP/Plasma/Source/Cathode/Voltage
/UPP/Plasma/Source/Voltages/CathodeHouse
/UPP/Plasma/Source/CathodeHouse/Voltage
/UPP/Plasma/Source/Voltages/Plate1
/UPP/Plasma/Source/Plate1/Voltage
/UPP/Plasma/Source/Voltages/Plate2
/UPP/Plasma/Source/Plate2/Voltage
/UPP/Plasma/Source/Voltages/Plate3
/UPP/Plasma/Source/Plate3/Voltage
/UPP/Plasma/Source/Voltages/Plate4
/UPP/Plasma/Source/Plate4/Voltage
/UPP/Plasma/Source/Voltages/Plate5
/UPP/Plasma/Source/Plate5/Voltage
/UPP/Plasma/Source/Voltages/Plate6
/UPP/Plasma/Source/Plate6/Voltage
/UPP/Plasma/Source/Gas/ChannelPressure
/UPP/Plasma/Source/Thermocouple/Tc1
/UPP/Plasma/Source/Thermocouple/Tc2
/UPP/Target/Thermocouple/Tc1
/UPP/Target/Thermocouple/Tc2
/UPP/Target/Bias/VoltagePv
/UPP/Plasma/PowerSupply/Ps1.1/Status
/UPP/Plasma/PowerSupply/Ps1.2/Status
/UPP/Plasma/PowerSupply/Ps1.3/Status
/UPP/Plasma/PowerSupply/Ps1.1/VoltagePv
/UPP/Plasma/PowerSupply/Ps1.2/VoltagePv
/UPP/Plasma/PowerSupply/Ps1.3/VoltagePv
/UPP/Plasma/PowerSupply/Ps1.1/CurrentPv
/UPP/Plasma/PowerSupply/Ps1.2/CurrentPv
/UPP/Plasma/PowerSupply/Ps1.3/CurrentPv
/UPP/Magnet/PowerSupply/Unit1/CurrentPv
/UPP/Magnet/PowerSupply/Unit2/CurrentPv
/UPP/Magnet/PowerSupply/Unit3/CurrentPv
/UPP/Magnet/PowerSupply/Unit4/CurrentPv
/UPP/Plasma/GasInlet/Mfc1/FlowSp
/UPP/Plasma/GasInlet/Mfc2/FlowSp
/UPP/Plasma/GasInlet/Mfc3/FlowSp
/UPP/Plasma/GasInlet/Mfc4/FlowSp
/UPP/Plasma/GasInlet/Mfc5/FlowSp
/UPP/Plasma/GasInlet/Mfc6/FlowSp
/UPP/Plasma/GasInlet/Mfc7/FlowSp
/UPP/Plasma/GasInlet/Mfc8/FlowSp
/UPP/Plasma/PowerSupply/Ps1.1/VoltageSp
/UPP/Plasma/PowerSupply/Ps1.2/VoltageSp
/UPP/Plasma/PowerSupply/Ps1.3/VoltageSp
/UPP/Plasma/PowerSupply/Ps1.1/CurrentSp
/UPP/Plasma/PowerSupply/Ps1.2/CurrentSp
/UPP/Plasma/PowerSupply/Ps1.3/CurrentSp
/UPP/Magnet/PowerSupply/Unit1/CurrentSp
/UPP/Magnet/PowerSupply/Unit2/CurrentSp
/UPP/Magnet/PowerSupply/Unit3/CurrentSp
/UPP/Magnet/PowerSupply/Unit4/CurrentSp
/UPP/Plasma/Source/Gas/Valve
/UPP/Vacuum/GasInlet/Valve
/UPP/Target/Bias/PsConnected
Input pathes sorted:
/UPP/Diagnostics/IonBeamDet1/CooledPower
/UPP/Diagnostics/IonBeamDet1/WaterFlow
/UPP/Diagnostics/IonBeamDet1/WaterTemp
/UPP/HpCooling/Manifold/Flows/SourceAnode
/UPP/HpCooling/Manifold/Flows/SourceCathodeHouse
/UPP/HpCooling/Manifold/Flows/SourceCathode
/UPP/HpCooling/Manifold/Flows/SourceNozzle
/UPP/HpCooling/Manifold/Flows/SourcePlate1
/UPP/HpCooling/Manifold/Flows/SourcePlate2
/UPP/HpCooling/Manifold/Flows/SourcePlate3
/UPP/HpCooling/Manifold/Flows/SourcePlate4
/UPP/HpCooling/Manifold/Flows/SourcePlate5
/UPP/HpCooling/Manifold/Flows/SourcePlate6
/UPP/HpCooling/Manifold/Flows/Target
/UPP/HpCooling/Manifold/Temperatures/SourceAnode
/UPP/HpCooling/Manifold/Temperatures/SourceCathode
/UPP/HpCooling/Manifold/Temperatures/SourceCathodeHouse
/UPP/HpCooling/Manifold/Temperatures/SourceNozzle
/UPP/HpCooling/Manifold/Temperatures/SourcePlate1
/UPP/HpCooling/Manifold/Temperatures/SourcePlate2
/UPP/HpCooling/Manifold/Temperatures/SourcePlate3
/UPP/HpCooling/Manifold/Temperatures/SourcePlate4
/UPP/HpCooling/Manifold/Temperatures/SourcePlate5
/UPP/HpCooling/Manifold/Temperatures/SourcePlate6
/UPP/HpCooling/Manifold/Temperatures/Supply
/UPP/HpCooling/Manifold/Temperatures/Target
/UPP/LpCooling/Manifold/Calorimeters/DirtyWaterUnit
/UPP/LpCooling/Manifold/Calorimeters/IonBeamDetector
/UPP/LpCooling/Manifold/Calorimeters/MagnetCoil1
/UPP/LpCooling/Manifold/Calorimeters/MagnetCoil2
/UPP/LpCooling/Manifold/Calorimeters/MagnetCoil3
/UPP/LpCooling/Manifold/Calorimeters/MagnetPS
/UPP/LpCooling/Manifold/Calorimeters/PlasmaPS
/UPP/LpCooling/Manifold/Calorimeters/SourceAnode
/UPP/LpCooling/Manifold/Calorimeters/SourceCathode
/UPP/LpCooling/Manifold/Calorimeters/SourceFlange
/UPP/LpCooling/Manifold/Calorimeters/SourceHouse
/UPP/LpCooling/Manifold/Calorimeters/SourceNozzle
/UPP/LpCooling/Manifold/Calorimeters/SourcePlate1
/UPP/LpCooling/Manifold/Calorimeters/SourcePlate2
/UPP/LpCooling/Manifold/Calorimeters/SourcePlate3
/UPP/LpCooling/Manifold/Calorimeters/SourcePlate4
/UPP/LpCooling/Manifold/Calorimeters/SourcePlate5
/UPP/LpCooling/Manifold/Calorimeters/SourcePlate6
/UPP/LpCooling/Manifold/Calorimeters/Target
/UPP/LpCooling/Manifold/Calorimeters/Total
/UPP/LpCooling/Manifold/Calorimeters/Total
/UPP/LpCooling/Manifold/Calorimeters/VacuumPorts
/UPP/LpCooling/Manifold/Calorimeters/VacuumVessel
/UPP/LpCooling/Manifold/Flows/DirtyWaterUnit
/UPP/LpCooling/Manifold/Flows/IonBeamDetector
/UPP/LpCooling/Manifold/Flows/MagnetCoil1
/UPP/LpCooling/Manifold/Flows/MagnetCoil2
/UPP/LpCooling/Manifold/Flows/MagnetCoil3
/UPP/LpCooling/Manifold/Flows/MagnetPS
/UPP/LpCooling/Manifold/Flows/PlasmaPS
/UPP/LpCooling/Manifold/Flows/SourceFlange
/UPP/LpCooling/Manifold/Flows/VacuumPorts
/UPP/LpCooling/Manifold/Flows/VacuumVessel
/UPP/LpCooling/Manifold/Temperatures/DirtyWaterUnit
/UPP/LpCooling/Manifold/Temperatures/IonBeamDetector
/UPP/LpCooling/Manifold/Temperatures/MagnetCoil1
/UPP/LpCooling/Manifold/Temperatures/MagnetCoil2
/UPP/LpCooling/Manifold/Temperatures/MagnetCoil3
/UPP/LpCooling/Manifold/Temperatures/MagnetPS
/UPP/LpCooling/Manifold/Temperatures/PlasmaPS
/UPP/LpCooling/Manifold/Temperatures/SourceFlange
/UPP/LpCooling/Manifold/Temperatures/Supply
/UPP/LpCooling/Manifold/Temperatures/VacuumPorts
/UPP/LpCooling/Manifold/Temperatures/VacuumVessel
/UPP/Magnet/Coil1/ConnectedPsNr
/UPP/Magnet/Coil1/CooledPower
/UPP/Magnet/Coil1/CurrentPv
/UPP/Magnet/Coil1/WaterFlow
/UPP/Magnet/Coil1/WaterTemp
/UPP/Magnet/Coil2/ConnectedPsNr
/UPP/Magnet/Coil2/CooledPower
/UPP/Magnet/Coil2/CurrentPv
/UPP/Magnet/Coil2/WaterFlow
/UPP/Magnet/Coil2/WaterTemp
/UPP/Magnet/Coil3/ConnectedPsNr
/UPP/Magnet/Coil3/CooledPower
/UPP/Magnet/Coil3/CurrentPv
/UPP/Magnet/Coil3/WaterFlow
/UPP/Magnet/Coil3/WaterTemp
/UPP/Magnet/PowerSupply/CooledPower
/UPP/Magnet/PowerSupply/StatusRegisterRack
/UPP/Magnet/PowerSupply/StatusRegisterUnit12
/UPP/Magnet/PowerSupply/StatusRegisterUnit34
/UPP/Magnet/PowerSupply/Unit1/CurrentPv
/UPP/Magnet/PowerSupply/Unit1/CurrentSp
/UPP/Magnet/PowerSupply/Unit2/CurrentPv
/UPP/Magnet/PowerSupply/Unit2/CurrentSp
/UPP/Magnet/PowerSupply/Unit3/CurrentPv
/UPP/Magnet/PowerSupply/Unit3/CurrentSp
/UPP/Magnet/PowerSupply/Unit4/CurrentPv
/UPP/Magnet/PowerSupply/Unit4/CurrentSp
/UPP/Magnet/PowerSupply/WaterFlow
/UPP/Magnet/PowerSupply/WaterTemp
/UPP/Plasma/ControlSystem/ExperimentConfigFileName
/UPP/Plasma/ControlSystem/ExpWaterFlowEnBits
/UPP/Plasma/ControlSystem/ExpWaterTempEnBits
/UPP/Plasma/ControlSystem/PlasmaShutdown
/UPP/Plasma/ControlSystem/SourceVoltEnBits
/UPP/Plasma/ControlSystem/SourceWaterFlowEnBits
/UPP/Plasma/ControlSystem/SourceWaterTempEnBits
/UPP/Plasma/ControlSystem/ThermocoupleEnBits
/UPP/Plasma/ControlSystem/UplaMode
/UPP/Plasma/ControlSystem/UplaPlcState
/UPP/Plasma/GasInlet/Cylinders/Cyl1GasType
/UPP/Plasma/GasInlet/Cylinders/Cyl2GasType
/UPP/Plasma/GasInlet/Cylinders/Cyl3GasType
/UPP/Plasma/GasInlet/Cylinders/Cyl4GasType
/UPP/Plasma/GasInlet/Cylinders/Cyl6GasType
/UPP/Plasma/GasInlet/Mfc1/FlowPv
/UPP/Plasma/GasInlet/Mfc1/FlowSp
/UPP/Plasma/GasInlet/Mfc1/ValveEnabled
/UPP/Plasma/GasInlet/Mfc2/FlowPv
/UPP/Plasma/GasInlet/Mfc2/FlowSp
/UPP/Plasma/GasInlet/Mfc2/ValveEnabled
/UPP/Plasma/GasInlet/Mfc3/FlowPv
/UPP/Plasma/GasInlet/Mfc3/FlowSp
/UPP/Plasma/GasInlet/Mfc3/ValveEnabled
/UPP/Plasma/GasInlet/Mfc4/FlowPv
/UPP/Plasma/GasInlet/Mfc4/FlowSp
/UPP/Plasma/GasInlet/Mfc4/ValveEnabled
/UPP/Plasma/GasInlet/Mfc5/FlowPv
/UPP/Plasma/GasInlet/Mfc5/FlowSp
/UPP/Plasma/GasInlet/Mfc5/ValveEnabled
/UPP/Plasma/GasInlet/Mfc6/FlowPv
/UPP/Plasma/GasInlet/Mfc6/FlowSp
/UPP/Plasma/GasInlet/Mfc7/FlowPv
/UPP/Plasma/GasInlet/Mfc7/FlowSp
/UPP/Plasma/GasInlet/Mfc7/ValveEnabled
/UPP/Plasma/GasInlet/Mfc8/FlowPv
/UPP/Plasma/GasInlet/Mfc8/FlowSp
/UPP/Plasma/GasInlet/Mfc8/ValveEnabled
/UPP/Plasma/PowerSupply/CooledPower
/UPP/Plasma/PowerSupply/Ps1.1/CurrentPv
/UPP/Plasma/PowerSupply/Ps1.1/CurrentSp
/UPP/Plasma/PowerSupply/PS1.1/IgnitionMode
/UPP/Plasma/PowerSupply/PS1.1/SourceConnection
/UPP/Plasma/PowerSupply/Ps1.1/Status
/UPP/Plasma/PowerSupply/PS1.1/TargetConnection
/UPP/Plasma/PowerSupply/Ps1.1/VoltagePv
/UPP/Plasma/PowerSupply/Ps1.1/VoltageSp
/UPP/Plasma/PowerSupply/Ps1.2/CurrentPv
/UPP/Plasma/PowerSupply/Ps1.2/CurrentSp
/UPP/Plasma/PowerSupply/PS1.2/IgnitionMode
/UPP/Plasma/PowerSupply/PS1.2/SourceConnection
/UPP/Plasma/PowerSupply/Ps1.2/Status
/UPP/Plasma/PowerSupply/PS1.2/TargetConnection
/UPP/Plasma/PowerSupply/Ps1.2/VoltagePv
/UPP/Plasma/PowerSupply/Ps1.2/VoltageSp
/UPP/Plasma/PowerSupply/Ps1.3/CurrentPv
/UPP/Plasma/PowerSupply/Ps1.3/CurrentSp
/UPP/Plasma/PowerSupply/PS1.3/IgnitionMode
/UPP/Plasma/PowerSupply/PS1.3/SourceConnection
/UPP/Plasma/PowerSupply/Ps1.3/Status
/UPP/Plasma/PowerSupply/PS1.3/TargetConnection
/UPP/Plasma/PowerSupply/Ps1.3/VoltagePv
/UPP/Plasma/PowerSupply/Ps1.3/VoltageSp
/UPP/Plasma/PowerSupply/StatusRegister
/UPP/Plasma/PowerSupply/WaterFlow
/UPP/Plasma/PowerSupply/WaterTemp
/UPP/Plasma/Source/Anode/CooledPower
/UPP/Plasma/Source/Anode/WaterFlow
/UPP/Plasma/Source/Anode/WaterTemp
/UPP/Plasma/Source/Cathode/CooledPower
/UPP/Plasma/Source/Cathode/CurrentPs
/UPP/Plasma/Source/Cathode/Voltage
/UPP/Plasma/Source/Cathode/VoltagePs
/UPP/Plasma/Source/Cathode/WaterFlow
/UPP/Plasma/Source/Cathode/WaterTemp
/UPP/Plasma/Source/CathodeHouse/CooledPower
/UPP/Plasma/Source/CathodeHouse/Voltage
/UPP/Plasma/Source/CathodeHouse/WaterFlow
/UPP/Plasma/Source/CathodeHouse/WaterTemp
/UPP/Plasma/Source/Config/Comment
/UPP/Plasma/Source/Config/Description
/UPP/Plasma/Source/Config/DrawingName
/UPP/Plasma/Source/Config/FileName
/UPP/Plasma/Source/Config/Id
/UPP/Plasma/Source/Config/NumPlates
/UPP/Plasma/Source/Gas/ChannelPressure
/UPP/Plasma/Source/Gas/FlowAr
/UPP/Plasma/Source/Gas/FlowCh4
/UPP/Plasma/Source/Gas/FlowD2
/UPP/Plasma/Source/Gas/FlowH2
/UPP/Plasma/Source/Gas/FlowHe
/UPP/Plasma/Source/Gas/FlowN2
/UPP/Plasma/Source/Gas/FlowNe
/UPP/Plasma/Source/Gas/FlowXe
/UPP/Plasma/Source/Gas/Valve
/UPP/Plasma/Source/Nozzle/CooledPower
/UPP/Plasma/Source/Nozzle/WaterFlow
/UPP/Plasma/Source/Nozzle/WaterTemp
/UPP/Plasma/Source/Plate1/CooledPower
/UPP/Plasma/Source/Plate1/Voltage
/UPP/Plasma/Source/Plate1/WaterFlow
/UPP/Plasma/Source/Plate1/WaterTemp
/UPP/Plasma/Source/Plate2/CooledPower
/UPP/Plasma/Source/Plate2/Voltage
/UPP/Plasma/Source/Plate2/WaterFlow
/UPP/Plasma/Source/Plate2/WaterTemp
/UPP/Plasma/Source/Plate3/CooledPower
/UPP/Plasma/Source/Plate3/Voltage
/UPP/Plasma/Source/Plate3/WaterFlow
/UPP/Plasma/Source/Plate3/WaterTemp
/UPP/Plasma/Source/Plate4/CooledPower
/UPP/Plasma/Source/Plate4/Voltage
/UPP/Plasma/Source/Plate4/WaterFlow
/UPP/Plasma/Source/Plate4/WaterTemp
/UPP/Plasma/Source/Plate5/CooledPower
/UPP/Plasma/Source/Plate5/Voltage
/UPP/Plasma/Source/Plate5/WaterFlow
/UPP/Plasma/Source/Plate5/WaterTemp
/UPP/Plasma/Source/Plate6/CooledPower
/UPP/Plasma/Source/Plate6/Voltage
/UPP/Plasma/Source/Plate6/WaterFlow
/UPP/Plasma/Source/Plate6/WaterTemp
/UPP/Plasma/Source/Thermocouple/Tc1
/UPP/Plasma/Source/Thermocouple/Tc2
/UPP/Plasma/Source/Voltages/Cathode
/UPP/Plasma/Source/Voltages/CathodeHouse
/UPP/Plasma/Source/Voltages/Plate1
/UPP/Plasma/Source/Voltages/Plate2
/UPP/Plasma/Source/Voltages/Plate3
/UPP/Plasma/Source/Voltages/Plate4
/UPP/Plasma/Source/Voltages/Plate5
/UPP/Plasma/Source/Voltages/Plate6
/UPP/Target/Bias/CurrentPs
/UPP/Target/Bias/PositivePolarity
/UPP/Target/Bias/PsConnected
/UPP/Target/Bias/VoltagePs
/UPP/Target/Bias/VoltagePv
/UPP/Target/Calorimeter/CooledPower
/UPP/Target/Calorimeter/HeaterCurrent
/UPP/Target/Calorimeter/HeaterPower
/UPP/Target/Calorimeter/HeaterVoltage
/UPP/Target/Calorimeter/WaterTempDiff
/UPP/Target/Cooling/CooledPowerMf
/UPP/Target/Cooling/WaterFlowMf
/UPP/Target/Cooling/WaterTempMf
/UPP/Target/Thermocouple/Tc1
/UPP/Target/Thermocouple/Tc2
/UPP/Vacuum/Cooling/Ports/CooledPower
/UPP/Vacuum/Cooling/Ports/WaterFlow
/UPP/Vacuum/Cooling/Ports/WaterTemp
/UPP/Vacuum/Cooling/SourceFlange/CooledPower
/UPP/Vacuum/Cooling/SourceFlange/WaterFlow
/UPP/Vacuum/Cooling/SourceFlange/WaterTemp
/UPP/Vacuum/Cooling/Vessel/CooledPower
/UPP/Vacuum/Cooling/Vessel/WaterFlow
/UPP/Vacuum/Cooling/Vessel/WaterTemp
/UPP/Vacuum/GasInlet/FlowAr
/UPP/Vacuum/GasInlet/FlowCh4
/UPP/Vacuum/GasInlet/FlowD2
/UPP/Vacuum/GasInlet/FlowH2
/UPP/Vacuum/GasInlet/FlowHe
/UPP/Vacuum/GasInlet/FlowN2
/UPP/Vacuum/GasInlet/FlowNe
/UPP/Vacuum/GasInlet/FlowXe
/UPP/Vacuum/GasInlet/Valve
/UPP/Vacuum/Vessel/Thermocouple/Tc1
/UPP/Vacuum/Vessel/Thermocouple/Tc2
/UPP/Vacuum/Vessel/Thermocouple/Tc3
/UPP/Vacuum/Vessel/Thermocouple/Tc4
/UPP/Vacuum/Vessel/Thermocouple/Tc6
/UPP/Vacuum/Vessel/Thermocouple/Tc5
Code: Select all
+ UPP
+ Diagnostics
+ IonBeamDet1
+ CooledPower
+ WaterFlow
+ WaterTemp
+ HpCooling
+ Manifold
+ Flows
+ SourceAnode
+ SourceCathodeHouse
+ SourceCathode
+ SourceNozzle
+ SourcePlate1
+ SourcePlate2
+ SourcePlate3
+ SourcePlate4
+ SourcePlate5
+ SourcePlate6
+ Target
+ Temperatures
+ SourceAnode
+ SourceCathode
+ SourceCathodeHouse
+ SourceNozzle
+ SourcePlate1
+ SourcePlate2
+ SourcePlate3
+ SourcePlate4
+ SourcePlate5
+ SourcePlate6
+ Supply
+ Target
+ LpCooling
+ Manifold
+ Calorimeters
+ DirtyWaterUnit
+ Manifold
+ Calorimeters
+ IonBeamDetector
+ Manifold
+ Calorimeters
+ MagnetCoil1
+ Manifold
+ Calorimeters
+ MagnetCoil2
+ Manifold
+ Calorimeters
+ MagnetCoil3
+ Manifold
+ Calorimeters
+ MagnetPS
+ Manifold
+ Calorimeters
+ PlasmaPS
+ Manifold
+ Calorimeters
+ SourceAnode
+ Manifold
+ Calorimeters
+ SourceCathode
+ Manifold
+ Calorimeters
+ SourceFlange
+ Manifold
+ Calorimeters
+ SourceHouse
+ Manifold
+ Calorimeters
+ SourceNozzle
+ Manifold
+ Calorimeters
+ SourcePlate1
+ Manifold
+ Calorimeters
+ SourcePlate2
+ Manifold
+ Calorimeters
+ SourcePlate3
+ Manifold
+ Calorimeters
+ SourcePlate4
+ Manifold
+ Calorimeters
+ SourcePlate5
+ Manifold
+ Calorimeters
+ SourcePlate6
+ Manifold
+ Calorimeters
+ Target
+ Manifold
+ Calorimeters
+ Total
+ Manifold
+ Calorimeters
+ Total
+ Manifold
+ Calorimeters
+ VacuumPorts
+ Manifold
+ Calorimeters
+ VacuumVessel
+ Manifold
+ Flows
+ DirtyWaterUnit
+ Manifold
+ Flows
+ IonBeamDetector
+ Manifold
+ Flows
+ MagnetCoil1
+ Manifold
+ Flows
+ MagnetCoil2
+ Manifold
+ Flows
+ MagnetCoil3
+ Manifold
+ Flows
+ MagnetPS
+ Manifold
+ Flows
+ PlasmaPS
+ Manifold
+ Flows
+ SourceFlange
+ Manifold
+ Flows
+ VacuumPorts
+ Manifold
+ Flows
+ VacuumVessel
+ Manifold
+ Temperatures
+ DirtyWaterUnit
+ Manifold
+ Temperatures
+ IonBeamDetector
+ Manifold
+ Temperatures
+ MagnetCoil1
+ Manifold
+ Temperatures
+ MagnetCoil2
+ Manifold
+ Temperatures
+ MagnetCoil3
+ Manifold
+ Temperatures
+ MagnetPS
+ Manifold
+ Temperatures
+ PlasmaPS
+ Manifold
+ Temperatures
+ SourceFlange
+ Manifold
+ Temperatures
+ Supply
+ Manifold
+ Temperatures
+ VacuumPorts
+ Manifold
+ Temperatures
+ VacuumVessel
+ Magnet
+ Coil1
+ ConnectedPsNr
+ CooledPower
+ CurrentPv
+ WaterFlow
+ WaterTemp
+ Coil2
+ ConnectedPsNr
+ CooledPower
+ CurrentPv
+ WaterFlow
+ WaterTemp
+ Coil3
+ ConnectedPsNr
+ CooledPower
+ CurrentPv
+ WaterFlow
+ WaterTemp
+ PowerSupply
+ CooledPower
+ StatusRegisterRack
+ StatusRegisterUnit12
+ StatusRegisterUnit34
+ Unit1
+ CurrentPv
+ CurrentSp
+ Unit2
+ CurrentPv
+ CurrentSp
+ Unit3
+ CurrentPv
+ CurrentSp
+ Unit4
+ CurrentPv
+ CurrentSp
+ WaterFlow
+ WaterTemp
+ Plasma
+ ControlSystem
+ ExperimentConfigFileName
+ ExpWaterFlowEnBits
+ ExpWaterTempEnBits
+ PlasmaShutdown
+ SourceVoltEnBits
+ SourceWaterFlowEnBits
+ SourceWaterTempEnBits
+ ThermocoupleEnBits
+ UplaMode
+ UplaPlcState
+ GasInlet
+ Cylinders
+ Cyl1GasType
+ Cyl2GasType
+ Cyl3GasType
+ Cyl4GasType
+ Cyl6GasType
+ Mfc1
+ FlowPv
+ FlowSp
+ ValveEnabled
+ Mfc2
+ FlowPv
+ FlowSp
+ ValveEnabled
+ Mfc3
+ FlowPv
+ FlowSp
+ ValveEnabled
+ Mfc4
+ FlowPv
+ FlowSp
+ ValveEnabled
+ Mfc5
+ FlowPv
+ FlowSp
+ ValveEnabled
+ Mfc6
+ FlowPv
+ FlowSp
+ Mfc7
+ FlowPv
+ FlowSp
+ ValveEnabled
+ Mfc8
+ FlowPv
+ FlowSp
+ ValveEnabled
+ PowerSupply
+ CooledPower
+ PowerSupply
+ Ps1.1
+ CurrentPv
+ PowerSupply
+ Ps1.1
+ CurrentSp
+ PowerSupply
+ PS1.1
+ IgnitionMode
+ PowerSupply
+ PS1.1
+ SourceConnection
+ PowerSupply
+ Ps1.1
+ Status
+ PowerSupply
+ PS1.1
+ TargetConnection
+ PowerSupply
+ Ps1.1
+ VoltagePv
+ PowerSupply
+ Ps1.1
+ VoltageSp
+ PowerSupply
+ Ps1.2
+ CurrentPv
+ PowerSupply
+ Ps1.2
+ CurrentSp
+ PowerSupply
+ PS1.2
+ IgnitionMode
+ PowerSupply
+ PS1.2
+ SourceConnection
+ PowerSupply
+ Ps1.2
+ Status
+ PowerSupply
+ PS1.2
+ TargetConnection
+ PowerSupply
+ Ps1.2
+ VoltagePv
+ PowerSupply
+ Ps1.2
+ VoltageSp
+ PowerSupply
+ Ps1.3
+ CurrentPv
+ PowerSupply
+ Ps1.3
+ CurrentSp
+ PowerSupply
+ PS1.3
+ IgnitionMode
+ PowerSupply
+ PS1.3
+ SourceConnection
+ PowerSupply
+ Ps1.3
+ Status
+ PowerSupply
+ PS1.3
+ TargetConnection
+ PowerSupply
+ Ps1.3
+ VoltagePv
+ PowerSupply
+ Ps1.3
+ VoltageSp
+ PowerSupply
+ StatusRegister
+ PowerSupply
+ WaterFlow
+ PowerSupply
+ WaterTemp
+ Source
+ Anode
+ CooledPower
+ WaterFlow
+ WaterTemp
+ Cathode
+ CooledPower
+ CurrentPs
+ Voltage
+ VoltagePs
+ WaterFlow
+ WaterTemp
+ CathodeHouse
+ CooledPower
+ Voltage
+ WaterFlow
+ WaterTemp
+ Config
+ Comment
+ Description
+ DrawingName
+ FileName
+ Id
+ NumPlates
+ Gas
+ ChannelPressure
+ FlowAr
+ FlowCh4
+ FlowD2
+ FlowH2
+ FlowHe
+ FlowN2
+ FlowNe
+ FlowXe
+ Valve
+ Nozzle
+ CooledPower
+ WaterFlow
+ WaterTemp
+ Plate1
+ CooledPower
+ Voltage
+ WaterFlow
+ WaterTemp
+ Plate2
+ CooledPower
+ Voltage
+ WaterFlow
+ WaterTemp
+ Plate3
+ CooledPower
+ Voltage
+ WaterFlow
+ WaterTemp
+ Plate4
+ CooledPower
+ Voltage
+ WaterFlow
+ WaterTemp
+ Plate5
+ CooledPower
+ Voltage
+ WaterFlow
+ WaterTemp
+ Plate6
+ CooledPower
+ Voltage
+ WaterFlow
+ WaterTemp
+ Thermocouple
+ Tc1
+ Tc2
+ Voltages
+ Cathode
+ CathodeHouse
+ Plate1
+ Plate2
+ Plate3
+ Plate4
+ Plate5
+ Plate6
+ Target
+ Bias
+ CurrentPs
+ PositivePolarity
+ PsConnected
+ VoltagePs
+ VoltagePv
+ Calorimeter
+ CooledPower
+ HeaterCurrent
+ HeaterPower
+ HeaterVoltage
+ WaterTempDiff
+ Cooling
+ CooledPowerMf
+ WaterFlowMf
+ WaterTempMf
+ Thermocouple
+ Tc1
+ Tc2
+ Vacuum
+ Cooling
+ Ports
+ CooledPower
+ Cooling
+ Ports
+ WaterFlow
+ Cooling
+ Ports
+ WaterTemp
+ Cooling
+ SourceFlange
+ CooledPower
+ Cooling
+ SourceFlange
+ WaterFlow
+ Cooling
+ SourceFlange
+ WaterTemp
+ Cooling
+ Vessel
+ CooledPower
+ Cooling
+ Vessel
+ WaterFlow
+ Cooling
+ Vessel
+ WaterTemp
+ GasInlet
+ FlowAr
+ GasInlet
+ FlowCh4
+ GasInlet
+ FlowD2
+ GasInlet
+ FlowH2
+ GasInlet
+ FlowHe
+ GasInlet
+ FlowN2
+ GasInlet
+ FlowNe
+ GasInlet
+ FlowXe
+ GasInlet
+ Valve
+ Vessel
+ Thermocouple
+ Tc1
+ Thermocouple
+ Tc2
+ Thermocouple
+ Tc3
+ Thermocouple
+ Tc4
+ Thermocouple
+ Tc6
+ Thermocouple
+ Tc5
Re: Parse string to tree structure
Your versions works with the real data above.grindstone wrote:And here are my two pennies to the tree parser:
...
Edit: One small issue: It does not display all items in a path before all sub-paths ("files before folders").
Output:
Code: Select all
+ root
+ UPP
+ Diagnostics
+ IonBeamDet1
+ CooledPower
+ WaterFlow
+ WaterTemp
+ HpCooling
+ Manifold
+ Flows
+ SourceAnode
+ SourceCathode
+ SourceCathodeHouse
+ SourceNozzle
+ SourcePlate1
+ SourcePlate2
+ SourcePlate3
+ SourcePlate4
+ SourcePlate5
+ SourcePlate6
+ Target
+ Temperatures
+ SourceAnode
+ SourceCathode
+ SourceCathodeHouse
+ SourceNozzle
+ SourcePlate1
+ SourcePlate2
+ SourcePlate3
+ SourcePlate4
+ SourcePlate5
+ SourcePlate6
+ Supply
+ Target
+ LpCooling
+ Manifold
+ Calorimeters
+ DirtyWaterUnit
+ IonBeamDetector
+ MagnetCoil1
+ MagnetCoil2
+ MagnetCoil3
+ MagnetPS
+ PlasmaPS
+ SourceAnode
+ SourceCathode
+ SourceFlange
+ SourceHouse
+ SourceNozzle
+ SourcePlate1
+ SourcePlate2
+ SourcePlate3
+ SourcePlate4
+ SourcePlate5
+ SourcePlate6
+ Target
+ Total
+ VacuumPorts
+ VacuumVessel
+ Flows
+ DirtyWaterUnit
+ IonBeamDetector
+ MagnetCoil1
+ MagnetCoil2
+ MagnetCoil3
+ MagnetPS
+ PlasmaPS
+ SourceFlange
+ VacuumPorts
+ VacuumVessel
+ Temperatures
+ DirtyWaterUnit
+ IonBeamDetector
+ MagnetCoil1
+ MagnetCoil2
+ MagnetCoil3
+ MagnetPS
+ PlasmaPS
+ SourceFlange
+ Supply
+ VacuumPorts
+ VacuumVessel
+ Magnet
+ Coil1
+ ConnectedPsNr
+ CooledPower
+ CurrentPv
+ WaterFlow
+ WaterTemp
+ Coil2
+ ConnectedPsNr
+ CooledPower
+ CurrentPv
+ WaterFlow
+ WaterTemp
+ Coil3
+ ConnectedPsNr
+ CooledPower
+ CurrentPv
+ WaterFlow
+ WaterTemp
+ PowerSupply
+ CooledPower
+ StatusRegisterRack
+ StatusRegisterUnit12
+ StatusRegisterUnit34
+ Unit1
+ CurrentPv
+ CurrentSp
+ Unit2
+ CurrentPv
+ CurrentSp
+ Unit3
+ CurrentPv
+ CurrentSp
+ Unit4
+ CurrentPv
+ CurrentSp
+ WaterFlow
+ WaterTemp
+ Plasma
+ ControlSystem
+ ExperimentConfigFileName
+ ExpWaterFlowEnBits
+ ExpWaterTempEnBits
+ PlasmaShutdown
+ SourceVoltEnBits
+ SourceWaterFlowEnBits
+ SourceWaterTempEnBits
+ ThermocoupleEnBits
+ UplaMode
+ UplaPlcState
+ GasInlet
+ Cylinders
+ Cyl1GasType
+ Cyl2GasType
+ Cyl3GasType
+ Cyl4GasType
+ Cyl6GasType
+ Mfc1
+ FlowPv
+ FlowSp
+ ValveEnabled
+ Mfc2
+ FlowPv
+ FlowSp
+ ValveEnabled
+ Mfc3
+ FlowPv
+ FlowSp
+ ValveEnabled
+ Mfc4
+ FlowPv
+ FlowSp
+ ValveEnabled
+ Mfc5
+ FlowPv
+ FlowSp
+ ValveEnabled
+ Mfc6
+ FlowPv
+ FlowSp
+ Mfc7
+ FlowPv
+ FlowSp
+ ValveEnabled
+ Mfc8
+ FlowPv
+ FlowSp
+ ValveEnabled
+ PowerSupply
+ CooledPower
+ PS1.1
+ CurrentPv
+ CurrentSp
+ IgnitionMode
+ SourceConnection
+ Status
+ TargetConnection
+ VoltagePv
+ VoltageSp
+ PS1.2
+ CurrentPv
+ CurrentSp
+ IgnitionMode
+ SourceConnection
+ Status
+ TargetConnection
+ VoltagePv
+ VoltageSp
+ PS1.3
+ CurrentPv
+ CurrentSp
+ IgnitionMode
+ SourceConnection
+ Status
+ TargetConnection
+ VoltagePv
+ VoltageSp
+ StatusRegister
+ WaterFlow
+ WaterTemp
+ Source
+ Anode
+ CooledPower
+ WaterFlow
+ WaterTemp
+ Cathode
+ CooledPower
+ CurrentPs
+ Voltage
+ VoltagePs
+ WaterFlow
+ WaterTemp
+ CathodeHouse
+ CooledPower
+ Voltage
+ WaterFlow
+ WaterTemp
+ Config
+ Comment
+ Description
+ DrawingName
+ FileName
+ Id
+ NumPlates
+ Gas
+ ChannelPressure
+ FlowAr
+ FlowCh4
+ FlowD2
+ FlowH2
+ FlowHe
+ FlowN2
+ FlowNe
+ FlowXe
+ Valve
+ Nozzle
+ CooledPower
+ WaterFlow
+ WaterTemp
+ Plate1
+ CooledPower
+ Voltage
+ WaterFlow
+ WaterTemp
+ Plate2
+ CooledPower
+ Voltage
+ WaterFlow
+ WaterTemp
+ Plate3
+ CooledPower
+ Voltage
+ WaterFlow
+ WaterTemp
+ Plate4
+ CooledPower
+ Voltage
+ WaterFlow
+ WaterTemp
+ Plate5
+ CooledPower
+ Voltage
+ WaterFlow
+ WaterTemp
+ Plate6
+ CooledPower
+ Voltage
+ WaterFlow
+ WaterTemp
+ Thermocouple
+ Tc1
+ Tc2
+ Voltages
+ Cathode
+ CathodeHouse
+ Plate1
+ Plate2
+ Plate3
+ Plate4
+ Plate5
+ Plate6
+ Target
+ Bias
+ CurrentPs
+ PositivePolarity
+ PsConnected
+ VoltagePs
+ VoltagePv
+ Calorimeter
+ CooledPower
+ HeaterCurrent
+ HeaterPower
+ HeaterVoltage
+ WaterTempDiff
+ Cooling
+ CooledPowerMf
+ WaterFlowMf
+ WaterTempMf
+ Thermocouple
+ Tc1
+ Tc2
+ Vacuum
+ Cooling
+ Ports
+ CooledPower
+ WaterFlow
+ WaterTemp
+ SourceFlange
+ CooledPower
+ WaterFlow
+ WaterTemp
+ Vessel
+ CooledPower
+ WaterFlow
+ WaterTemp
+ GasInlet
+ FlowAr
+ FlowCh4
+ FlowD2
+ FlowH2
+ FlowHe
+ FlowN2
+ FlowNe
+ FlowXe
+ Valve
+ Vessel
+ Thermocouple
+ Tc1
+ Tc2
+ Tc3
+ Tc4
+ Tc5
+ Tc6
Re: Parse string to tree structure
@badidea: thanks for testing. Sad to hear that it still doesn't work properly... :-(
C'est la vie...
¯\_(ツ)_/¯
C'est la vie...
¯\_(ツ)_/¯
Re: Parse string to tree structure
No problem, I can use grindstone's tool for now. Meanwhile i'll try to fix my own version.UEZ wrote:@badidea: thanks for testing. Sad to hear that it still doesn't work properly... :-(
C'est la vie...
¯\_(ツ)_/¯
Revised input data for those who want to test a larger data set:
Code: Select all
/UPP/Plasma/ControlSystem/UepmMode
/UPP/HpCooling/Manifold/Temperatures/Supply
/UPP/HpCooling/Manifold/Flows/Target
/UPP/Target/Cooling/WaterTempMf
/UPP/HpCooling/Manifold/Temperatures/Target
/UPP/Target/Cooling/WaterFlowMf
/UPP/HpCooling/Manifold/Flows/SourceAnode
/UPP/Plasma/Source/Components/Anode/WaterFlow
/UPP/HpCooling/Manifold/Temperatures/SourceAnode
/UPP/Plasma/Source/Components/Anode/WaterTemp
/UPP/HpCooling/Manifold/Flows/SourceNozzle
/UPP/Plasma/Source/Components/Nozzle/WaterFlow
/UPP/HpCooling/Manifold/Temperatures/SourceNozzle
/UPP/Plasma/Source/Components/Nozzle/WaterTemp
/UPP/HpCooling/Manifold/Flows/SourcePlate1
/UPP/Plasma/Source/Components/Plate1/WaterFlow
/UPP/HpCooling/Manifold/Temperatures/SourcePlate1
/UPP/Plasma/Source/Components/Plate1/WaterTemp
/UPP/HpCooling/Manifold/Flows/SourcePlate2
/UPP/Plasma/Source/Components/Plate2/WaterFlow
/UPP/HpCooling/Manifold/Temperatures/SourcePlate2
/UPP/Plasma/Source/Components/Plate2/WaterTemp
/UPP/HpCooling/Manifold/Flows/SourcePlate3
/UPP/Plasma/Source/Components/Plate3/WaterFlow
/UPP/HpCooling/Manifold/Temperatures/SourcePlate3
/UPP/Plasma/Source/Components/Plate3/WaterTemp
/UPP/HpCooling/Manifold/Flows/SourcePlate4
/UPP/Plasma/Source/Components/Plate4/WaterFlow
/UPP/HpCooling/Manifold/Temperatures/SourcePlate4
/UPP/Plasma/Source/Components/Plate4/WaterTemp
/UPP/HpCooling/Manifold/Flows/SourcePlate5
/UPP/Plasma/Source/Components/Plate5/WaterFlow
/UPP/HpCooling/Manifold/Temperatures/SourcePlate5
/UPP/Plasma/Source/Components/Plate5/WaterTemp
/UPP/HpCooling/Manifold/Flows/SourcePlate6
/UPP/Plasma/Source/Components/Plate6/WaterFlow
/UPP/HpCooling/Manifold/Temperatures/SourcePlate6
/UPP/Plasma/Source/Components/Plate6/WaterTemp
/UPP/HpCooling/Manifold/Flows/SourceCathodeHouse
/UPP/Plasma/Source/Components/CathodeHouse/WaterFlow
/UPP/HpCooling/Manifold/Temperatures/SourceCathodeHouse
/UPP/Plasma/Source/Components/CathodeHouse/WaterTemp
/UPP/HpCooling/Manifold/Flows/SourceCathode
/UPP/Plasma/Source/Components/Cathode/WaterFlow
/UPP/HpCooling/Manifold/Temperatures/SourceCathode
/UPP/Plasma/Source/Components/Cathode/WaterTemp
/UPP/LpCooling/Manifold/Temperatures/Supply
/UPP/Target/Calorimeter/WaterTempDiff
/UPP/Target/Calorimeter/HeaterVoltage
/UPP/Target/Calorimeter/HeaterCurrent
/UPP/LpCooling/Manifold/Flows/DirtyWaterUnit
/UPP/LpCooling/Manifold/Temperatures/DirtyWaterUnit
/UPP/LpCooling/Manifold/Flows/MagnetCoil1
/UPP/Magnet/Coil1/WaterFlow
/UPP/LpCooling/Manifold/Temperatures/MagnetCoil1
/UPP/Magnet/Coil1/WaterTemp
/UPP/LpCooling/Manifold/Flows/MagnetCoil2
/UPP/Magnet/Coil2/WaterFlow
/UPP/LpCooling/Manifold/Temperatures/MagnetCoil2
/UPP/Magnet/Coil2/WaterTemp
/UPP/LpCooling/Manifold/Flows/MagnetCoil3
/UPP/Magnet/Coil3/WaterFlow
/UPP/LpCooling/Manifold/Temperatures/MagnetCoil3
/UPP/Magnet/Coil3/WaterTemp
/UPP/LpCooling/Manifold/Flows/VacuumVessel
/UPP/Vacuum/Cooling/Vessel/WaterFlow
/UPP/LpCooling/Manifold/Temperatures/VacuumVessel
/UPP/Vacuum/Cooling/Vessel/WaterTemp
/UPP/LpCooling/Manifold/Flows/VacuumPorts
/UPP/Vacuum/Cooling/Ports/WaterFlow
/UPP/LpCooling/Manifold/Temperatures/VacuumPorts
/UPP/Vacuum/Cooling/Ports/WaterTemp
/UPP/LpCooling/Manifold/Flows/SourceFlange
/UPP/Vacuum/Cooling/SourceFlange/WaterFlow
/UPP/LpCooling/Manifold/Temperatures/SourceFlange
/UPP/Vacuum/Cooling/SourceFlange/WaterTemp
/UPP/LpCooling/Manifold/Flows/MagnetPS
/UPP/Magnet/PowerSupply/WaterFlow
/UPP/LpCooling/Manifold/Temperatures/MagnetPS
/UPP/Magnet/PowerSupply/WaterTemp
/UPP/LpCooling/Manifold/Flows/PlasmaPS
/UPP/Plasma/PowerSupply/WaterFlow
/UPP/LpCooling/Manifold/Temperatures/PlasmaPS
/UPP/Plasma/PowerSupply/WaterTemp
/UPP/LpCooling/Manifold/Flows/IonBeamDetector
/UPP/Diagnostics/IonBeamDet1/WaterFlow
/UPP/LpCooling/Manifold/Temperatures/IonBeamDetector
/UPP/Diagnostics/IonBeamDet1/WaterTemp
/UPP/Target/Calorimeter/CooledPower
/UPP/Target/Calorimeter/HeaterPower
/UPP/HpCooling/Manifold/Calorimeters/Target
/UPP/Target/Cooling/CooledPowerMf
/UPP/HpCooling/Manifold/Calorimeters/SourceAnode
/UPP/Plasma/Source/Components/Anode/CooledPower
/UPP/HpCooling/Manifold/Calorimeters/SourceNozzle
/UPP/Plasma/Source/Components/Nozzle/CooledPower
/UPP/HpCooling/Manifold/Calorimeters/SourcePlate1
/UPP/Plasma/Source/Components/Plate1/CooledPower
/UPP/HpCooling/Manifold/Calorimeters/SourcePlate2
/UPP/Plasma/Source/Components/Plate2/CooledPower
/UPP/HpCooling/Manifold/Calorimeters/SourcePlate3
/UPP/Plasma/Source/Components/Plate3/CooledPower
/UPP/HpCooling/Manifold/Calorimeters/SourcePlate4
/UPP/Plasma/Source/Components/Plate4/CooledPower
/UPP/HpCooling/Manifold/Calorimeters/SourcePlate5
/UPP/Plasma/Source/Components/Plate5/CooledPower
/UPP/HpCooling/Manifold/Calorimeters/SourcePlate6
/UPP/Plasma/Source/Components/Plate6/CooledPower
/UPP/HpCooling/Manifold/Calorimeters/SourceCathodeHouse
/UPP/Plasma/Source/Components/CathodeHouse/CooledPower
/UPP/HpCooling/Manifold/Calorimeters/SourceCathode
/UPP/Plasma/Source/Components/Cathode/CooledPower
/UPP/HpCooling/Manifold/Calorimeters/Total
/UPP/LpCooling/Manifold/Calorimeters/DirtyWaterUnit
/UPP/LpCooling/Manifold/Calorimeters/MagnetCoil1
/UPP/Magnet/Coil1/CooledPower
/UPP/LpCooling/Manifold/Calorimeters/MagnetCoil2
/UPP/Magnet/Coil2/CooledPower
/UPP/LpCooling/Manifold/Calorimeters/MagnetCoil3
/UPP/Magnet/Coil3/CooledPower
/UPP/LpCooling/Manifold/Calorimeters/VacuumVessel
/UPP/Vacuum/Cooling/Vessel/CooledPower
/UPP/LpCooling/Manifold/Calorimeters/VacuumPorts
/UPP/Vacuum/Cooling/Ports/CooledPower
/UPP/LpCooling/Manifold/Calorimeters/SourceFlange
/UPP/Vacuum/Cooling/SourceFlange/CooledPower
/UPP/LpCooling/Manifold/Calorimeters/MagnetPS
/UPP/Magnet/PowerSupply/CooledPower
/UPP/LpCooling/Manifold/Calorimeters/PlasmaPS
/UPP/Plasma/PowerSupply/CooledPower
/UPP/LpCooling/Manifold/Calorimeters/IonBeamDetector
/UPP/Diagnostics/IonBeamDet1/CooledPower
/UPP/LpCooling/Manifold/Calorimeters/Total
/UPP/Plasma/ControlSystem/UplaMode
/UPP/Plasma/ControlSystem/PlasmaShutdown
/UPP/Plasma/PowerSupply/StatusRegister
/UPP/Magnet/PowerSupply/StatusRegisterUnit12
/UPP/Magnet/PowerSupply/StatusRegisterUnit34
/UPP/Magnet/PowerSupply/StatusRegisterRack
/UPP/Plasma/ControlSystem/UplaPlcState
/UPP/Plasma/GasSystem/Cylinders/Cyl1GasType
/UPP/Plasma/GasSystem/Cylinders/Cyl2GasType
/UPP/Plasma/GasSystem/Cylinders/Cyl3GasType
/UPP/Plasma/GasSystem/Cylinders/Cyl4GasType
/UPP/Plasma/GasSystem/Cylinders/Cyl6GasType
/UPP/Plasma/PowerSupply/PS1.1/IgnitionMode
/UPP/Plasma/PowerSupply/PS1.2/IgnitionMode
/UPP/Plasma/PowerSupply/PS1.3/IgnitionMode
/UPP/Plasma/PowerSupply/PS1.1/SourceConnection
/UPP/Plasma/PowerSupply/PS1.2/SourceConnection
/UPP/Plasma/PowerSupply/PS1.3/SourceConnection
/UPP/Plasma/PowerSupply/PS1.1/TargetConnection
/UPP/Plasma/PowerSupply/PS1.2/TargetConnection
/UPP/Plasma/PowerSupply/PS1.3/TargetConnection
/UPP/Target/Bias/PositivePolarity
/UPP/Magnet/Coil1/ConnectedPsNr
/UPP/Magnet/Coil2/ConnectedPsNr
/UPP/Magnet/Coil3/ConnectedPsNr
/UPP/Plasma/GasSystem/Mfc/Mfc1/ValveEnabled
/UPP/Plasma/GasSystem/Mfc/Mfc2/ValveEnabled
/UPP/Plasma/GasSystem/Mfc/Mfc3/ValveEnabled
/UPP/Plasma/GasSystem/Mfc/Mfc4/ValveEnabled
/UPP/Plasma/GasSystem/Mfc/Mfc5/ValveEnabled
/UPP/Plasma/GasSystem/Mfc/Mfc7/ValveEnabled
/UPP/Plasma/GasSystem/Mfc/Mfc8/ValveEnabled
/UPP/Plasma/Source/Config/FileName
/UPP/Plasma/Source/Config/Id
/UPP/Plasma/Source/Config/DrawingName
/UPP/Plasma/Source/Config/Description
/UPP/Plasma/Source/Config/Comment
/UPP/Plasma/Source/Config/NumPlates
/UPP/Plasma/ControlSystem/SourceVoltEnBits
/UPP/Plasma/ControlSystem/SourceWaterFlowEnBits
/UPP/Plasma/ControlSystem/SourceWaterTempEnBits
/UPP/Plasma/ControlSystem/ExperimentConfigFileName
/UPP/Plasma/ControlSystem/ThermocoupleEnBits
/UPP/Plasma/ControlSystem/ExpWaterFlowEnBits
/UPP/Plasma/ControlSystem/ExpWaterTempEnBits
/UPP/Plasma/ControlSystem/Transition/Duration/Time1
/UPP/Plasma/ControlSystem/Transition/Duration/Time2
/UPP/Plasma/ControlSystem/Transition/Duration/Time3
/UPP/Plasma/ControlSystem/Transition/Duration/Time4
/UPP/Plasma/ControlSystem/Transition/Duration/Time5
/UPP/Plasma/ControlSystem/Transition/Duration/Time6
/UPP/Plasma/ControlSystem/Transition/Duration/Time7
/UPP/Plasma/ControlSystem/Transition/Duration/Time8
/UPP/Plasma/ControlSystem/Transition/Number/Cathode
/UPP/Plasma/ControlSystem/Transition/Number/TargetBias
/UPP/Plasma/ControlSystem/Transition/Number/Magnet
/UPP/Plasma/ControlSystem/Transition/Number/SourceGas1
/UPP/Plasma/ControlSystem/Transition/Number/SourceGas2
/UPP/Plasma/ControlSystem/Transition/Number/SourceGas3
/UPP/Plasma/ControlSystem/Transition/Number/SourceGas4
/UPP/Plasma/ControlSystem/Transition/Number/SourceGas5
/UPP/Plasma/ControlSystem/Transition/Number/VesselGas1
/UPP/Plasma/ControlSystem/Transition/Number/VesselGas1
/UPP/Plasma/ControlSystem/Transition/Number/VesselGas1
/UPP/Plasma/Source/Gas/FlowAr
/UPP/Plasma/Source/Gas/FlowH2
/UPP/Plasma/Source/Gas/FlowD2
/UPP/Plasma/Source/Gas/FlowHe
/UPP/Plasma/Source/Gas/FlowCh4
/UPP/Plasma/Source/Gas/FlowNe
/UPP/Plasma/Source/Gas/FlowXe
/UPP/Plasma/Source/Gas/FlowN2
/UPP/Vacuum/GasInlet/FlowAr
/UPP/Vacuum/GasInlet/FlowH2
/UPP/Vacuum/GasInlet/FlowD2
/UPP/Vacuum/GasInlet/FlowHe
/UPP/Vacuum/GasInlet/FlowCh4
/UPP/Vacuum/GasInlet/FlowNe
/UPP/Vacuum/GasInlet/FlowXe
/UPP/Vacuum/GasInlet/FlowN2
/UPP/Plasma/GasSystem/Mfc/Mfc1/FlowPv
/UPP/Plasma/GasSystem/Mfc/Mfc2/FlowPv
/UPP/Plasma/GasSystem/Mfc/Mfc3/FlowPv
/UPP/Plasma/GasSystem/Mfc/Mfc4/FlowPv
/UPP/Plasma/GasSystem/Mfc/Mfc5/FlowPv
/UPP/Plasma/GasSystem/Mfc/Mfc6/FlowPv
/UPP/Plasma/GasSystem/Mfc/Mfc7/FlowPv
/UPP/Plasma/GasSystem/Mfc/Mfc8/FlowPv
/UPP/Plasma/Source/Components/Cathode/VoltagePs
/UPP/Plasma/Source/Components/Cathode/CurrentPs
/UPP/Target/Bias/VoltagePs
/UPP/Target/Bias/CurrentPs
/UPP/Magnet/Coil1/CurrentPv
/UPP/Magnet/Coil2/CurrentPv
/UPP/Magnet/Coil3/CurrentPv
/UPP/Vacuum/Vessel/Thermocouple/Tc1
/UPP/Vacuum/Vessel/Thermocouple/Tc2
/UPP/Vacuum/Vessel/Thermocouple/Tc3
/UPP/Vacuum/Vessel/Thermocouple/Tc4
/UPP/Vacuum/Vessel/Thermocouple/Tc5
/UPP/Vacuum/Vessel/Thermocouple/Tc6
/UPP/Plasma/Source/Voltages/Cathode
/UPP/Plasma/Source/Components/Cathode/Voltage
/UPP/Plasma/Source/Voltages/CathodeHouse
/UPP/Plasma/Source/Components/CathodeHouse/Voltage
/UPP/Plasma/Source/Voltages/Plate1
/UPP/Plasma/Source/Components/Plate1/Voltage
/UPP/Plasma/Source/Voltages/Plate2
/UPP/Plasma/Source/Components/Plate2/Voltage
/UPP/Plasma/Source/Voltages/Plate3
/UPP/Plasma/Source/Components/Plate3/Voltage
/UPP/Plasma/Source/Voltages/Plate4
/UPP/Plasma/Source/Components/Plate4/Voltage
/UPP/Plasma/Source/Voltages/Plate5
/UPP/Plasma/Source/Components/Plate5/Voltage
/UPP/Plasma/Source/Voltages/Plate6
/UPP/Plasma/Source/Components/Plate6/Voltage
/UPP/Plasma/Source/Gas/ChannelPressure
/UPP/Plasma/Source/Thermocouple/Tc1
/UPP/Plasma/Source/Thermocouple/Tc2
/UPP/Target/Thermocouple/Tc1
/UPP/Target/Thermocouple/Tc2
/UPP/Target/Bias/VoltagePv
/UPP/Plasma/PowerSupply/Ps1.1/Status
/UPP/Plasma/PowerSupply/Ps1.2/Status
/UPP/Plasma/PowerSupply/Ps1.3/Status
/UPP/Plasma/PowerSupply/Ps1.1/VoltagePv
/UPP/Plasma/PowerSupply/Ps1.2/VoltagePv
/UPP/Plasma/PowerSupply/Ps1.3/VoltagePv
/UPP/Plasma/PowerSupply/Ps1.1/CurrentPv
/UPP/Plasma/PowerSupply/Ps1.2/CurrentPv
/UPP/Plasma/PowerSupply/Ps1.3/CurrentPv
/UPP/Magnet/PowerSupply/Unit1/CurrentPv
/UPP/Magnet/PowerSupply/Unit2/CurrentPv
/UPP/Magnet/PowerSupply/Unit3/CurrentPv
/UPP/Magnet/PowerSupply/Unit4/CurrentPv
/UPP/Plasma/GasSystem/Mfc/Mfc1/FlowSp
/UPP/Plasma/GasSystem/Mfc/Mfc2/FlowSp
/UPP/Plasma/GasSystem/Mfc/Mfc3/FlowSp
/UPP/Plasma/GasSystem/Mfc/Mfc4/FlowSp
/UPP/Plasma/GasSystem/Mfc/Mfc5/FlowSp
/UPP/Plasma/GasSystem/Mfc/Mfc6/FlowSp
/UPP/Plasma/GasSystem/Mfc/Mfc7/FlowSp
/UPP/Plasma/GasSystem/Mfc/Mfc8/FlowSp
/UPP/Plasma/PowerSupply/Ps1.1/VoltageSp
/UPP/Plasma/PowerSupply/Ps1.2/VoltageSp
/UPP/Plasma/PowerSupply/Ps1.3/VoltageSp
/UPP/Plasma/PowerSupply/Ps1.1/CurrentSp
/UPP/Plasma/PowerSupply/Ps1.2/CurrentSp
/UPP/Plasma/PowerSupply/Ps1.3/CurrentSp
/UPP/Magnet/PowerSupply/Unit1/CurrentSp
/UPP/Magnet/PowerSupply/Unit2/CurrentSp
/UPP/Magnet/PowerSupply/Unit3/CurrentSp
/UPP/Magnet/PowerSupply/Unit4/CurrentSp
/UPP/Plasma/Source/Gas/Valve
/UPP/Vacuum/GasInlet/Valve
/UPP/Target/Bias/PsConnected