clear
local aa[5,4]
aa[1,1]=1
aa[1,2]=2
aa[1,3]=12
aa[1,4]=123
aa[2,1]=3
aa[2,2]=4
aa[2,3]=34
aa[2,4]=345
aa[3,1]=5
aa[3,2]=6
aa[3,3]=56
aa[3,4]=567
aa[4,1]=7
aa[4,2]=8
aa[4,3]=78
aa[4,4]=789
aa[5,1]=9
aa[5,2]=10
aa[5,3]=910
aa[5,4]=901
*-----------------------------------------
* 转换前 转换后
*-----------------------------------------
* 1 2 12 123 1 3 5 7 9
* 3 4 34 345 2 4 6 8 10
* 5 6 56 567 12 34 56 78 910
* 7 8 78 789 123 345 567 789 901
* 9 10 910 901
*-----------------------------------------
* 分析:转换前的数组为5行4列,转换后的数组要求为4行5列,这就是矩阵转置,也就是我们通常所说的行转换为列。
* 转换前: 转换后(假设转换后的数组为bb)
* aa[1,1]=1 bb[1,1]=1
* aa[2,1]=3 bb[1,2]=3
* aa[3,1]=5 bb[1,3]=5
* aa[4,1]=7 bb[1,4]=7
* aa[5,1]=9 bb[1,5]=9
* aa[1,2]=2 bb[2,1]=2
* aa[2,2]=4 bb[2,2]=4
* aa[3,2]=6 bb[2,3]=6
* aa[4,2]=8 bb[2,4]=8
* aa[5,2]=10 bb[2,5]=10
* 其它的数据也是这样的规律,大家可以自己比较
* 从上面可以看出一个规律,转换前数组的行下标,即为转换后数组的列下标;转换前数组的列下标,即为转换后数组的行下标。
* 通过上面的分析,就可以用VFP的 asubscript() 获取到转换前数组元素的行下标与列下表,具体代码如下:
local bb[alen(aa,2),alen(aa,1)]
for i=1 to alen(aa)
nr=asubscript(aa,i,1) && 行下标
nc=asubscript(aa,i,2) && 列下标
bb[nc,nr]=aa[i]
endfor
* 显示结果
list memory like bb