问题描述
我有一个模型,可以从excel文件中读取数据。下面是模型的一部分。
我使用以下代码读取数据,如下所示:
tuple blockType {
string id;
int i;
int j;
int k;
};
{blockType} PitBlocksType = ...; // Read from excel table which contains several rows,a short example below
/*
Example below
Block Id Bench(i) Strip(j) Block(k)
P1 1 1 1
P2 1 1 2
P3 1 1 3
P7 3 1 1
P8 3 1 2
P9 3 1 3
P10 1 2 1
P11 1 2 2
P12 1 2 3
P16 3 2 1
P17 3 2 2
P18 3 2 3
P19 1 3 1
P20 1 3 2
P21 1 3 3
P22 2 3 1
P23 2 3 2
P24 2 3 3
P25 3 3 1
P26 3 3 2
P27 3 3 3
*/
tuple jk {
string ids;
int j;
int k;
}
{jk} jks=...; // from the above table reading only the j,k : There are multiple occurrences of the same j,k - Not sure if this is the best method
{int} BenchPerjk[jks]= ?????? ; // Here I want to read all i for each set of jks
//int succ3=next(BenchPerjk[<id,5,3>],3); // I want to use something like this below
{blockType} OntopPit[b1 in PitBlocksType] =
{b | b in PitBlocksType: b1.i == next(BenchPerjk[b.id,b.j,b.k],b.i) && // This is giving an error
((b1.k == b.k-1 ) ||
(b1.k == b.k+1 ) ||
(b1.k == b.k ) ) &&
((b1.j == b.j-1 ) ||
(b1.j == b.j+1 ) ||
(b1.j == b.j ) ) };
上面有2个问题-一个是如何通过过滤表中每组jk的数据来读取BenchPerjk [jks]。
请期待您的帮助,
解决方法
您无法在阅读时过滤内容,因此您始终必须阅读所有内容。掌握所有内容后,您应该可以按照以下步骤提取jks
:
tuple jk {
int j;
int k;
}
{jk} jks = { <t.j,t.k> | t in PitBlocksType };
execute { writeln(jks); }
{int} BenchPerjk[v in jks] = { t.i | t in PitBlocksType : t.j == v.j && t.k == v.k };
execute { writeln(BenchPerjk); }