• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VB6で、一次元配列と二次元配列の相互コピー)

VB6で一次元配列と二次元配列の相互コピーの効率的な方法とは

このQ&Aのポイント
  • VB6で一次元配列と二次元配列の相互コピーをしたいです。現在はループを使用して値をコピーしていますが、より効率的な方法はありますか?
  • VB6で一次元配列と二次元配列の相互コピーを行いたい場合、ループを使用して値をコピーする方法があります。しかし、宣言された配列のサイズが不定である場合には、効率的な方法があるかもしれません。
  • VB6で一次元配列と二次元配列の相互コピーを実現するためには、ループを使用して値をコピーする方法が一般的です。ただし、宣言された配列のサイズが不定な場合には、より効率的な方法を検討する必要があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.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

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1210197612 のような質問回答があるが、参考になりませんか。ここまでは通常の有名な話。 ー 配列で次元が違うものは、1つの代入式のような表現では無理でしょう。 実際コンピュターが内部でやることは、1つづつ両配列間で対応する要素に代入することは変わらなくて、プログラムコーディング上の見かけで、そういう代入の体裁に持ち込めるかどうかだが、新しい言語概念を作る(コピーメソッドを作るようなこと)ようなことになるだろうから、VB6では無理と思う。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 二次元配列のVBA

    二次元配列のVBAの書き方がよくわからないのですが、 私が作ったサンプルプログラムのSub 二次元()において 二次元配列で表すにはどうすればいいのでしょうか? Sub 二次元()では 配列を格納する変数はtmpしか使っていませんが もう一つ配列を格納する用の変数を作ればいいのでしょうか? 数字とアルファベットは別々に取り出したいです。 ----------------------------------------------------- Sub 一次元() Dim myStr As String Dim tmp As Variant Dim i As Long For i = 1 To 5 myStr = myStr & "," & i Next myStr = Mid(myStr, 2) tmp = Split(myStr, ",") For i = LBound(tmp) To UBound(tmp) Debug.Print tmp(i) Next i End Sub Sub 二次元() Dim myStr As String Dim tmp As Variant Dim i As Long For i = 1 To 5 myStr = myStr & "," & i & "と" & Chr(64 + i) Next myStr = Mid(myStr, 2) tmp = Split(myStr, ",") For i = LBound(tmp) To UBound(tmp) Debug.Print tmp(i) Next i End Sub

  • 多次元配列のスマートな書き方

    $key文字列の:区切りで階層化した多次元配列に$valを代入するのですが 階層が深くなるにつれてcaseの記述も増えるため、ほとんど無限?に深くても 代入できるように(イ)の部分を変えたいのですが、スマートに記述する方法はありますか? <?php $key = "A:B:C"; ////$key = "A:B:C:D:E:F:G"; // この場合はcase 7まで書かなければならない? $val = "test"; $soe = split(":", $key); // -------------------------- イ switch (count($soe)) { case 1: $atr[$soe[0]] = $val; break; case 2: $atr[$soe[0]][$soe[1]] = $val; break; case 3: $atr[$soe[0]][$soe[1]][$soe[2]] = $val; break; default: print "ERR!"; exit; } // -------------------------- イ print_r($atr); exit; ?>

    • 締切済み
    • PHP
  • 二次元配列について

    $recordは二次元配列です。 こういうものを書いておりまして、    foreach($record as $key => $val) { if($key > 18){   for($i=1; $i<=25; $i++){ $data = $record[0].",".$i.",".★★★; ★★★の位置に$record[19][1]、$record[20][1]…$record[19][2]、$record[20][2]… という値を順に入れていきたいのですが、どうしたらよいでしょうか。

    • 締切済み
    • PHP
  • 2次元配列の宣言について

    文字列の配列の場合 Dim m As Variant Dim moji As String m=Array("aa","bb","cc","dd",・・・) moji=m(1) とすれば"bb"がmojiに代入されるのはわかるのですが これを二次元配列(3行4列)にする場合どのように 宣言(Dim~や、Array~)等はどのように記述すればよろしいですか? 基本的な質問でごめんなさい。 よろしくお願いします。

  • AccessVBAで、二次元配列を動的に設定したい

    以下のコードにあるattrという配列に、DB上のとあるコードと名前を設定したいと思います。 DB上のデータ量は可変なので、データを取得するごとに動的に配列attrの要素数を動的に増やしたいと思っています。 検索等で色々と調べながら以下のコードを書いてみたのですが、どうもうまく動きません。 ご教授願います。 --------------------------------------------------- Dim attr() As String [loop start] ReDim Preserve attr(i, 0) ReDim Preserve attr(i, 1) attr(i, 0) = コード attr(i, 1) = 名前 [loop end]

  • VB.netの配列とVB6の配列の違い

    VB6で画面を作成し、演算処理を行うDLLをVC6で作成しています。 下記のコードでVB6でSingle型の2次元配列を宣言しま、VCのDLLでエクスポートしている関数に渡 します。 VC6DLL側のコード---------- EXPORT void __stdcall TESTFUNC (float *pfData,long nSize{ } VB側のコード---------- 宣言 Declare Function TESTFUNC Lib "TEST.dll" (ByRef pfData As Single, ByVal nSize As Long) As Long 配列宣言 Public sngDat(999,1) as single 呼び出し TESTFUNC sngDat(0,0),1000 このように呼び出した場合、VC6のTESTFUNC にブレークポイントを設定し、停止するとpfDataの ポインタをインクリメントした場合、sngDat(0,0),sngDat(1,0),sngDat(2,0)と、1次元目の添え字を インクリメントした状態になるように、メモリに格納されています。 この動作を前提として、VB.net側でも同じように呼び出してみました。 VB.net側のコード---------- 宣言 Declare Function TESTFUNC Lib "TEST.dll" (ByRef pfData As Single, ByVal nSize As Integer) As Integer 配列宣言 Public sngDat(999,1) as single 呼び出し TESTFUNC(sngDat(0,0),1000) VC側は全く同じコードを利用するとします。 同じように、VC6のTESTFUNC にブレークポイントを設定し、停止するとpfDataの ポインタをインクリメントした場合、sngDat(0,0),sngDat(0,1),sngDat(1,0)と,sngDat(1,1)、と1次元目の添え字を インクリメントせず、2次元目の添え字をインクリメントした状態になるように、メモリに格納されています。 VB6→VC6のDLLの場合の配列渡しと、VB.net→VC6のDLLの場合の配列渡しで違いがあるのは 何故でしょうか?また、VB.net側の配列渡しの仕様を、VB6側の仕様に合わせる方法は無いのでしょうか? よろしくお願いいたします。

  • VB2008: CSV を二次元配列に読み込む方法?

    VB.NET を知って今日で30日目という初学者です。 付属一覧.csv 品番001, 品番001用付属1, 品番001用付属2, 品番001用付属3 品番002, 品番002用付属1, 品番002用付属2, 品番002用付属3 品番003, 品番003用付属1, 品番003用付属2, 品番003用付属3 品番004, 品番004用付属1, 品番004用付属2, 品番004用付属3 品番005, 品番005用付属1, 品番005用付属2, 品番005用付属3 今、上記のCVSファイル配列に読み込む方法を探っています。 Using MyReader As New TextFieldParser(aFile, Encoding.Default)   While Not MyReader.EndOfData     aLines.Add(MyReader.ReadLine())   End While End Using と、ここまでは何とか回答に助けられて到達。 aLines は List です。 しかし、これは一次元配列。 Dim aFields(,) As String ReDim aFiles(N, M) As String とやれば、行ではなくフィールドで読めば、二次元配列も可能とは思っています。 しかし、これは N を確定する手続きが必須。 そこで質問は、そうしない妙手に関してです。 宜しくお願いします。

  • 二次元配列のサイズについて

    下記のプログラムにおいて、 Public 文字列格納(,) as Variant とか、 Public 文字列格納(,3) as Variant のような、二次元配列を宣言はできないでしょうか? 下記のプログラムは、A1セルに書かれた文字列を、 一文字ずつに分解してB列に転記し、 逆さにしたものを、1文字ずつにC列に転記する プログラムです。A1セルに書かれる文字列の長さは不定です。 本当の目的は、NCBI等から取得したDNAの塩基配列を入力したら、 相補鎖の塩基配列を作成したり、タンパク質に翻訳したり、 乖離エネルギーを計算したりするためのコードで、その一部を 簡単化したものです。 ===プログラムのソース=== Public 文字列格納 As Variant Public 文字列(100, 2) As Variant Sub テスト() 文字列格納 = Cells(1, 1) 長さ = Len(文字列格納) For i = 1 To 長さ 文字列(i, 1) = Mid(文字列格納, i, 1) 文字列(i, 2) = Mid(文字列格納, 長さ - i + 1, 1) Cells(i, 2) = 文字列(i, 1) Cells(i, 3) = 文字列(i, 2) Next i End Sub

  • 多次元配列を、1次元の配列にする関数を書いてください。

    以下のように、多次元配列の配列をペチャンコにする関数(array_flatten)ってどうかきますか? <?php $arr[0] = 'a'; $arr[1][0] = 'b'; $arr[1][1][0] = 'c'; $arr[1][1][1][0] = 'd'; $arr[1][1][1][1][0] = 'e'; $arr[1][1][1][2] = 'f'; $arr[1][1][2] = 'g'; $arr[1][2] = 'h'; $arr[2] = 'i'; function array_flatten($arg){   処理; } $new_arr = array_flatten($arr); print_r($new_arr); ?> ↓ Array (   [0] => a   [1] => b   [2] => c   [3] => d   [4] => e   [5] => f   [6] => g   [7] => h   [8] => i ) ※関数のなかで、ペチャンコの配列を格納するための新しい配列を宣言すると、 同関数を再帰的に呼び出したら、その配列が初期化されますよね?

    • ベストアンサー
    • PHP
  • VB 配列

    今,VBでテキストファイルを読込み配列に入れるという作業を書いたのですが,うまくいきません. 初回例外が発生してしまいます.配列は文字列の配列になります. どなたかご教示のほどよろしくお願いいたします. 'ファイルの読込み Dim path1 As String = "C:\Users\aleph_H.S\Desktop\気象台データインポートツール\気象台データインポートツール\" Dim path2 As String = "気象台データリスト.txt" Dim Mypath As String = path1 + path2 ' StreamReader の新しいインスタンスを生成する Dim cReader As New System.IO.StreamReader(Mypath, System.Text.Encoding.Default) ' 読み込んだ結果をすべて格納するための変数を宣言する Dim stResult As String = String.Empty Dim matrix(,) As String Dim ic As Long = 0 Dim icc As Long = 0 ReDim Preserve matrix(80, 3) ' 読み込みできる文字がなくなるまで繰り返す While (cReader.Peek() >= 0) ' ファイルを 1 行ずつ読み込む Dim stBuffer As String = cReader.ReadLine() ' 読み込んだものを追加で格納する stResult &= stBuffer & System.Environment.NewLine ic = ic + 1 'カンマ区切りで分割して配列に格納する Dim stArrayData As String() = stResult.Split(","c) For Each sstData In stArrayData icc = icc + 1 '文字列をInteger型に変換 matrix(ic - 1, icc - 1) = sstData Next End While cReader.Close()

このQ&Aのポイント
  • Windows11にパソコンを変えたらポスター印刷ができなくなりました。A3をA4×2枚で印刷したいのですが、どうすれば解決できるでしょうか?
  • Windows11でポスター印刷ができないトラブルに悩んでいます。A3サイズをA4×2枚で印刷する方法を教えていただけませんか?
  • ブラザー製品のHL-3170CDWでWindows11でのポスター印刷ができなくなりました。どのように設定すればA3をA4×2枚で印刷できるのでしょうか?
回答を見る

専門家に質問してみよう