• 締切済み

ReDimを使用した二次元配列

全レコードが不明のファイルから、レコードを読み込んで分割し二次元配列に格納したいのですが、項目(列)数は確定しています。この場合は、どうすればレコード(行)数を動的に変更していく事が出来るのでしょうか? ヘルプを見ても、ReDim x(行, 列)だったら、列しか変更出来ないように書いてあって困っています。 どなたか、御教授をお願いします。

みんなの回答

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.5

レコードを作成する側で、 レコード数を先頭に書き込むようにしたらどうでしょう。

KatsuoIsono
質問者

お礼

レコード数は、先頭に書くことは出来ません。 都合上、そうなっているようです。 レコード数は、あくまでもプログラムの方でカウントしなくてはいけないみたいです。

全文を見る
すると、全ての回答が全文表示されます。
  • kachimi
  • ベストアンサー率40% (12/30)
回答No.4

項目数が分かっているのでしたら#2さんの方法がよいと思うのですが・・・ Type A ' 中身は項目のレイアウトにしてください Field1 As String Field2 As Integer End Type dim Rec() as A dim lngRecCnt as Long で宣言し、 lngRecCnt = lngRecCnt + 1 Redim Preserve Rec(lngRecCnt)

KatsuoIsono
質問者

お礼

構造体にしてしまうと、「ガチガチのプログラムになってしまうから」と先輩からの指摘を受けましたので却下したのです。 出来るだけ柔軟に対応できるようにしたいので…。

全文を見る
すると、全ての回答が全文表示されます。
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

メモリに余裕があるなら、いったん "Scripting.Dictionary"オブジェクトで全部読み込んでしまってからReDimする あるいは、文字列として、いったん全部読み込みしてSplitで配列にする、以下前出と同じ 余裕がないなら、ファイルを一度空読みして、レコード数を決定してReDimしてから、ファイルを読み直す

KatsuoIsono
質問者

お礼

その方法も考えました。しかし、処理完了速度の低下の懸念があり却下したんです。

全文を見る
すると、全ての回答が全文表示されます。
  • momoturbo
  • ベストアンサー率55% (49/88)
回答No.2

2次配列の動的確保は#1さんの方法しかないと思います。 違った方法になりますが、ユーザー定義型を使用して みてはいかがでしょうか? Private Type rcd komoku(項目数を入れてください) As String End Type Dim udtRcd() As rcd

KatsuoIsono
質問者

補足

そうですか…。分かりました。

全文を見る
すると、全ての回答が全文表示されます。
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

ReDim x(列, 行) にする

KatsuoIsono
質問者

補足

その方法は考えましたが、改良する時やレコード数が膨大な量になると、プログラミングとして分かりづらいので却下したんです。

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

関連するQ&A

  • 二次元配列が、勝手に一次元配列になってしまう

    Excelのマクロで、二次元配列を格納したバリアント型を戻り値とする関数を作ったのですが、… 二次元型配列のひとつの要素数が1の時、受け取ったバリアント型変数は、一次元配列になっています。 列ベクトルなら、それもありかな~と思うのですが、なんで、行ベクトルまで、一次元配列にするんだよ~って、困っています。 シートから関数を呼んだ場合は、列ベクトルは列ベクトル、行ベクトルは行ベクトルとして、表示されるので、マクロの中で関数を呼び出した場合も、行列の情報を保持できる方法があるんじゃないかと思ったのですが。 どなたか、ご教示頂けるとありがたいです。 よろしくお願いします。

  • 二次元配列のインデックスについて

    基礎的な質問かもしれませんが、ネットで調べたのですが、うまく回答が見つからなかったので、教えて下さい。 VB.netで二次元配列を扱っているのですが、この要素はどこにあるのかを知りたいのです。 一次元配列でしたら、Indexof を使えば、どこのインデックスに配置されているかが分かると思うのですが、 二次元配列の場合は、どうすればインデックス数が分かるのでしょうか。 例えば、列は0で固定だけど、どこの行にこの要素が格納されているか分からないから、行番号を知りたいと言うときです。 よろしくお願いいたします。

  • 動的に多次元配列を使用したい

    動的に多次元配列を使用したい お世話になります。 adobe flash professional :ActionScript 3.0 を使用しています。 例えば、 [ア][あ] [イ][い] [ウ][う] ・ ・ ・ の、x行・2列の動的な多次元配列を使用したいのですが、 動的な多次元配列の作成の仕方を教えて頂けないでしょうか? お手数ですがよろしくお願いします。

    • ベストアンサー
    • Flash
  • C# 多次元配列の要素数の変更

    現在、C#2005にて開発を行っているものです。 最近C#を始めたばかりで、分からないことだらけです。 以前はVBで開発を行っており、配列の要素数を変更することなど容易だと思っていたのですが、そう簡単にはいかなそうです。 VBではRedimがあったのですが、C#にはRedimがありません。 そこでネット等で調べてみたところ、Array.Resizeで配列の要素数が変更できることがわかりました。 ですが、1次元配列にしか対応されていない気がします。 現在開発しているシステムでは明細データの履歴情報を登録する部分を担当しています。配列A[変更前又は変更後,明細(行)No.,列No.](3次元配列)を使用して変更前と変更後の明細データを比較しております。 呼び出した明細データの明細行数分のみ(なので可変です)、配列Aの要素数を変更していきたいのですが、どなたかご教授頂けませんでしょうか。 大変お手数をお掛け致しますが、よろしくお願い致します。

  • 二次元配列で"一列"取り出すには?

    すいませんC# を勉強中なのですが、 たとえば int[,] a = new int[2,2] {            {1,2},            {3,4}         } という2x2の二次元配列があったとき 縦の列、つまり1と3だけ抜き取って配列に格納したい、または2と4だけを抜き取って配列に格納するにはどうすればいいでしょうか? 実際には配列に抜き取った後に hairetsu.Max(); でその列の最大値を出したいと考えています。 たくさん量があるとき、どうすれば簡単に列の配列を抜きとれるのでしょうか、ご存じの方よろしくお願いします…

  • 2次元配列について、教えてください。

    基本的なことなのでしょうがまだよくわかっていません。 ワークシートにたとえると、1次元は縦方向(行番号方向)、二次元は横方向(列番号方向)ですよね? 列数、行数にあたるのが1次元、二次元それぞれの添字ですよね? そしてセルに当たるのが「要素」ですよね? 以上の解釈があっていたら、 1.A列やB列にあたるものはなんと呼ぶのでしょうか? 2.1行目や2行目にあたるのはなんと呼びますか? 3.ワークシートで行や列を削除するような感じで2次元配列の行や列にあたるものを削除することはできますか? 4.UBound関数は、配列の大きさを調べられますが、この大きさは添字です。ワークシートのCells(65536,1).End(xlUp)Rowのように実際にデータがどこまで入っているか調べられますか? 教えてください。 前提とした解釈自体が違っていたらそれもご指摘ください。

  • ReDim Preserveできなかった配列をUBOUND……

    VBScriptでプログラムを組んでおります。 初心者なので言葉の使い方が間違っているかもしれませんがご容赦ください。 ASPでDBにアクセスして、このときにReDim Preserveを使って配列(str)を動的に拡張しながらDBから項目を抽出しています。 この動的に作った配列の項目を表示する際にどうしても項目数が必要なので UBound(str)で要素数を抜き出して使用しています。 DBにデータがあれば問題ないのですが、DBにデータがない場合はUBound(str)実行時に -------------------------- Microsoft VBScript 実行時エラー (0x800A0009) インデックスが有効範囲にありません。: 'ubound' -------------------------- と表示されてしまいます。 これを回避するにはDBから1つの項目を抽出する度に+1するような変数を作れば事足りるとは思いますが、 そうすると配列内の項目を表示する関数の引数を増やすことになり、少し納得がいきません。 Dim str() において Redim str(1)をしたかしてないかを見分ける方法を教えてくださいませんか。 ……無ければ「無い」と仰ってくれれば助かります。 では失礼します。 お時間があればご協力宜しくお願いします。

  • 多次元配列はなぜ必要???

    なぜ多次元配列というものが必要なのでしょうか? 長さ10の1次元配列と、2行5列の2次元配列だと、記憶できる量は同じではないですか? よく2次元配列を表に例えて「表のように使います」と説明しているサイト等がありますが、 DBと違って配列は添え字でしか管理できないんだか、表のように考えるメリットもよくわかりません。 更にもっと謎なのが3次元以上の配列の存在です。 これは実際に使っている人はいるのでしょうか・・・?

  • C# 配列の配列(多次元配列?)

    C#において、配列の配列中に格納した値を、検索することを 行いたいのですが、格納した値そのものを見ることができません。 まだ、C#を始めて間もないので、配列に格納する時点で、 不備があるかも知れませんが、お願いします。 やりたいこと ・テキストファイル内にある値を、2次元配列または、多次元配列に格納 ・配列に格納した値で、データチェックなどを行う予定  テキストファイル内のデータは、下記内容となり要素数も固定ではなく変動する   A=1,2,3・・・   B=11,22,33・・・ 実際のソースは、 //配列 ArrayList list = new ArrayList(); //配列格納 1レコード毎用 ArrayList listtmp = new ArrayList(); while ((strGenderTextLine = objReader.ReadLine()) != null) {  string strBuffer;  //「=」前の値格納用変数  string[] strBuffer2; //「=」後の値格納用配列  listtmp=null;  //strtmpに「=」前の値を格納  strtmp = TextLine.Split('=').GetValue(0).ToString();  //strtmp2に「=」後の値を格納(配列)  strtmp2 = TextLine.Split('=').GetValue(1).ToString().Split(',');  for (int i = 0; i <= strtmp2.Length - 1; i ++)  {   //[i,0]に、「=」前の値を代入   if (i == 0)   {   listtmp.Add(strtmp);   }   else   {   listtmp.Add(strtmp2[i].ToString());   }  }  //list配列にlistTmp配列を格納(配列の配列)  list.Add(listtmp);  intT = intT + strtmp2.Length;  //行数カウント  intTLine = intTLine + 1;  } ここから、配列「list」内に入っている値を閲覧することができる方法を教えていただければと思います。 宜しくお願いいたします。

  • 2次元配列をポインタで参照したいのですが・・

    下記Aのような2次元配列を作るとします。 A:1行あたり1024文字(ASCII)格納できるN行の2次元配列 Aの定義をまず下記Bのように行い、その後サイズ分メモリを確保しました。 B:char *str; この変数strを使って、x番目の行のy番目の文字を参照したい場合、どのようにすれば良いのでしょうか? 下記Cではやはりうまくいかないのでしょうか? C:str[x][y] 申し訳ございませんが、ご教授よろしくお願い致します。