我首先定义了一个二维数组 Dim Ary(17, 4) As String ,我循环从MDB中读取数据然后存入到二维数组中,取完后要求把数组变成Ary(4, 17),应该怎么做啊?

解决方案 »

  1.   

    先把二维数组的数据放入一维数组,然后重定义二维数组,再把一维数组的数据放入二维数组。

    Dim Ary2() As String
    Dim Ary1() As StringRedim Ary2(17,4)
    ...Redim Ary1((17+1)*(14+1))
    k = 0
    For i = 0 to 17
       For j = 0 to 4
          Ary1(k) = Ary2(i,j)
          k = k + 1
       Next j
    Next ik = 0
    Redim Ary2(4,17)
    For i = 0 to 4
       For j = 0 to 17
          Ary2(i,j) = Ary1(k)
          k = k + 1
       Next j
    Next i
      

  2.   

    要做出这个程序,其实不难,楼主需要理解数组在内存中的存储方式即可。不管是一维数组还是多维数组,其在内存中都是顺序存储的,即:一维数组是按元素顺序存储,二维是先将第一纬按顺序存储,紧接着就是第二维,多维依次类推。所以转换的时候,所以转换的时候只需要取得数组在内存中的首地址即可,而VarPtr()函数可以读取数组第一个元素的地址,也就是数组首地址。有了首地址在分配元素就不是问题了。
      

  3.   

    可以用函数封装一个转换行列取值
    function GetNewArray(var Row as integer,var Col as integer) as string
    begin
    GetNewArray=Ary(col,row)
    end;
      

  4.   

    个人觉得是不是多余了?
    为什么需要转换?17行4列转成4行17号吗?如果数据量不是很大建议用
    dim Tmp() as Variant,dim str as string
    ..
    str=rs(x)
    ..
    redim tmp(xx)
    ..
    tmp(0)=split(str,"XXXXX")
    tmp(1)=split(tmp(0),"yyyyy")这样很动态,随便要几行列,甚至行列还可以不一致咯~~
      

  5.   

    直接使用api,memcopy之类的函数即可。
      

  6.   

    是因为我的本来需要的是ary(4,17),17列是固定的,但是行要求根据数据大小动态增加,但是用Redim 是只能动态扩展最后一维的,所以我就想把数据取出来后先存入在ary(17,4)中,然后再把数组row,col互换,变成ary(4,17)输出,就是不知道怎么把二维数组的row,col互换?
      

  7.   

    楼主看看这个(太多的数据,速度会慢的):'用于下标为0开始的二维数组转换
    Private Sub ExchangeArr2D(arrSour() As String, arrNew() As String)
          Dim i&, j&
          Dim m&, n&, p&
       
       m = UBound(arrSour, 1)
       n = UBound(arrSour, 2)
       ReDim arrNew(n, m)
       For i = 0 To m
          For j = 0 To n
             arrNew(j, i) = arrSour(i, j)
          Next
       Next
    End Sub'应用示例
    Private Sub Test()
          Dim arrTemp() As String
          Dim Ary(17, 4) As String
          Dim i&, j&
       
       'Ary() 读取数据……
       '调用变换过程:
       Call ExchangeArr2D(Ary, arrTemp)
       ' 输出转换结果
       For i = 0 To 4
          For j = 0 To 17
             Debug.Print i, j, arrTemp(i, j)
          Next
       Next
    End Sub
      

  8.   

    Dim Ary1(17, 4) As String, Ary2(4, 17) As String
    Dim i As Long, j As LongFor i = 0 To 17
    For j = 0 To 4  Ary2(j, i) = Ary1(i, j)Next j
    Next i