人生最悪の忘れ物

VB6で、一次元配列と二次元配列の相互コピーをしたいです。

(1)元々下記のような宣言をもつ配列がありました。
Public Type TKey
no As String
id As String
code As String
atr() As String
End Type

Public Type tr
Key As TKey
atr() As String
abc As Boolean
End Type

Public gtr() As tr


(2)コピー用に、下記のような二次元配列用宣言をつくりました。
Public Type TKey2
2no As String
2id As String
2code As String
a2tr() As String
End Type

Public Type 2tr
Key22 As TKey2
atr22() As String
abc22 As Boolean
End Type

Public g2tr() As 2tr


(3)  (1)から(2)にデータを複製したり、
(4)  (2)から(1)にデータを複製したいです。

今は、下記のように面倒くさいことをしています。
dim gtr(maxcnt)
ReDim Preserve g2tr(500, maxcnt)

ループ
g2tr(cnt, i).Key22.2code = gtr(i).Key.code ・・・(3)
gtr(i).Key.code = g2tr(j, i).Key22.2code ・・・(4)
      今は上記を全ての宣言の配列に実行しています。

なにかもっと効率のよい方法はないでしょうか。
(1)の配列は、1~500くらいはあり、不定です。

A 回答 (2件)

構造体のメンバーが同じ構成ならばランダムアクセスファイルを使ってベタに流してやればいいのでは



' ファイル番号は FreeFileで取得したほうがいいかも
Open "sample.bin" for random as #1
' 書き出す位置は適宜修正してください
for n = 0 to 20
  ' レコード番号を省略すると 1番から順に出力します
  put #1,,g2tr(n,1)
next
' 読み出す位置の修正も ・・・
for n = 0 to 20
  ' レコード番号は1番からなので n+1で指示
  Get #1, n+1, gtr(n)
next
close
    • good
    • 0

http://detail.chiebukuro.yahoo.co.jp/qa/question …
のような質問回答があるが、参考になりませんか。ここまでは通常の有名な話。

配列で次元が違うものは、1つの代入式のような表現では無理でしょう。
実際コンピュターが内部でやることは、1つづつ両配列間で対応する要素に代入することは変わらなくて、プログラムコーディング上の見かけで、そういう代入の体裁に持ち込めるかどうかだが、新しい言語概念を作る(コピーメソッドを作るようなこと)ようなことになるだろうから、VB6では無理と思う。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報