在For循环中设置If循环

时间:2014-01-07 21:41:36

标签: igor

我设置了两个表。

表1 = [0,1,2,3,4,5]

表2 = [554,543,554,544,564,553]

我想做的就是以下几点:

(1)我想取表1中的值,读取它,然后用表2中相同的索引识别它。

所以例如Table1 [0] = 0,因此我们会发现Table2 [Table1 [0]] = 554

(2)从表1的给定值开始,我想通过表2的全部内容,并附加数据首先小于A = 541或大于B = 553的值,并相应地将相应的值存储在不同的表中。

当我读取Table1时,我从Table1 [0] = 0开始,然后继续将此0作为Table2的索引,继续读取Table2的全部内容,只要表2中的值为< ; A或> B.

例如,从表1 [1] = 1 - >开始;然后我将继续读出表2 [1]之后的所有值:表2 [2] = 554,......等。在这种情况下,表2 [1]之后的第一个值是554,其> B所以我将它附加到另一个表并继续运行,下一个值Table2 [3] = 544既不大于B也不小于A所以我忽略并继续等等。

我的代码如下,但不确定出了什么问题。我正在使用Igor环境,但代码几乎像C ++一样可读:

Function Trial(Data1, Data2)
//Waves are just the tables that contain the data. Data1 = Table1, Data2 = Table2

Wave Data1 
Wave Data2

Variable A = 541;
Variable B = 553;
Variable i, j, k
Variable XScale, Invalid
Variable numPoints = numpnts(Data1) //Number of Points in the array 
Variable numPoints2 = numpnts(Data2)

for(i=0; i<numPoints; i+=1)
   XScale = Data1[i]
   Wave TrialCrossingA, TrialCrossingB
   Make /N=(numPoints2)/O TrialCrossingA, TrialCrossingB 
   //Makes new tables to append required values 
   for(j=Xscale; j<numPoints2; j+=1)
            If(Data2[j] <= Xa)
                TrialCrossingA[i] = XScale
            Elseif(Data2[j] >= Xb) 
                TrialCrossingB[i] = XScale
            Endif 
   endfor
endfor

End

1 个答案:

答案 0 :(得分:0)

我认为你在这里犯了一个错误,

   for(j=Xscale; j<numPoints2; j+=1)
            If(Data2[j] <= Xa) // This is supposed to be Data2 I guess ?
                TrialCrossingA[i] = XScale
            Elseif(Data2[j] >= Xb) // This is supposed to be Data2 I guess ?
                TrialCrossingB[i] = XScale
            Endif 
   endfor
相关问题