06-17-2016 09:25 AM
Dear,
I am having problems using global arrays
If UBound(index) <> 0 then For j = 0 to (UBound (index)) nDiff = (index2(j)*nDelT)-(index(j)*nDelT) If nDiff >= 7 then GlobalReDim "Preserve ind_1_5(j)" : ind_1_5(j) = index(j) +(1.5/nDelT) GlobalReDim "Preserve ind_5(j)": ind_5(j) = index(j) +(5/nDelT) GlobalReDim "Preserve ind_7(j)": ind_7(j) = index(j) +(7/nDelT) End If If nDiff <7 and nDiff >= 5 then GlobalReDim "Preserve ind_1_5(j)" : MsgBox (Ubound(ind_1_5) & " y " & j) ind_1_5(j) = index(j) +(1.5/nDelT) GlobalReDim "Preserve ind_5(j)": ind_5(j) = index(j) +(5/nDelT) GlobalReDim "Preserve ind_7(j)" : ind_7(j) = -1 End If If nDiff >= 1.5 and nDiff <5 then GlobalReDim "Preserve ind_1_5(j)": ind_1_5(j)= index(j) +(1.5/nDelT) GlobalReDim "Preserve ind_5(j)": ind_5(j) = -1 GlobalReDim "Preserve ind_7(j)" : ind_7(j) = -1 End If If nDiff < 1.5 then GlobalReDim"Preserve ind_1_5(j)" : ind_1_5(j) = -1 GlobalReDim"Preserve ind_5(j)" : ind_5(j) = -1 GlobalReDim"Preserve ind_7(j)" : ind_7(j) = -1 End If Next Else GlobalReDim (ind_1_5(0)) : ind_1_5(0) = -1 GlobalReDim(ind_5(0)) : ind_5(0) = -1 GlobalReDim(ind_7(0)) : ind_7(0) = -1 End If
The command GlobalReDim "Preserve.... is not working... I dont know why it dont re dimension the arrays. I get to j =1, after asking to do the GlobalReDim ("Preserve") my Arrays should have new dimension but after I recieve a message "Subscript out of range: 'j' ", the message bos I locate in the code is to verify that case.
Any idea what I am doing wrong???
Solved! Go to Solution.
06-20-2016 02:51 PM
Hi Maria,
I didn't spot a problem in your code, but it looks like you're doing an awful lot of redimensioning. Could you please describe what you're trying to accomplish? Also, when and how do these variables get created the first time?
Brad Turpin
DIAdem Product Support Engineer
National Instruments
06-21-2016 03:47 AM
Dear,
I am trying to find when some condition in a channel if happening, in this case that the value in my channel will be 100, if it happens for more than 7 seconds I want to keep the information of other channel just after those 7 seconds, but also after 5 and 1.5 seconds. If it only happend for a total time between 5 and 7 seconds, I want to have the information of the other channel at 5 and 1.5 seconds... so thats basically the idea.
Do cnt = cnt + 1 iInd = ChnFind ("Ch("""&str(Data.Root.ActiveChannelGroup.Name)&"/"& str(oAccel.Name) &""")="&str(nInd),iInd2+1) iInd2 = ChnFind ("Ch("""&str(Data.Root.ActiveChannelGroup.Name)&"/"& str(oAccel.Name) &""")<"&str(nInd),iInd+1) ReDim Preserve index(cnt-1) : index(cnt-1) = iInd ReDim Preserve index2(cnt-1) : index2(cnt-1) = iInd2 Loop Until (iInd = 0) ReDim Preserve index(UBound(index)-1) ReDim Preserve index2(UBound(index2)-1) Dim nDelT : nDelT = oAccel.Properties("wf_increment").Value 'Times GlobalDim ("ind_1_5()"): GlobalDim ("ind_5()") : GlobalDim ("ind_7()") : Dim nDiff
Thats the fisrt part of the procedure...
Thank you for your answer
Best Regards
Maria
06-21-2016 11:29 AM
Hi Maria,
If you have DIAdem 2014 or later I'd recommend using the ChnEvent...() functions to identify the regions of interest. These functions officially released in DIAdem 2015 with ANALYSIS dialogs and Help entries, but there is a slightly different version that shipped with DIAdem 2014 that was only available from a VBScript. What DIAdem version are you using?
What is the reason for storing your answers in global arrays as opposed to local VBScript arrays or new DIAdem channels? What do you want to do with those results after you discover them? Plot them? Analyze them? Save them back to a data file?
Brad Turpin
DIAdem Product Support Engineer
National Instruments
12-13-2022 06:22 AM
Hi,
I have familiar problem like Maria was a few years ago.
I am trying to make dynamic array to print values at table but global function Call GlobalReDim ("Preserve Arr(index)") : Arr(index) = 0 do not work.
Down below you have the script code:
Dim i
GlobalDim "Arr" : Arr = Array()
For i=0 to 10
GlobalReDim "Preserve Arr(i)"
Arr(i) = 0
Next
12-14-2022 01:04 AM
Hi Dan-Dud,
Your loop variable needs to be interpreted. The correct code is as follows:
Dim i
If Not Iteminfoget("Arr") Then
call GlobalDim("Arr()")
end if
For i=0 to 10
call GlobalReDim("Preserve Arr(" & str(i) & ")")
Arr(i) = i
Next
For i=0 to 10
LogfileWrite Arr(i)
Next
Greetings
Walter
12-14-2022 07:03 AM
Thank you, now it works perfectly.