tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトル配列の格納
記事No8991
投稿日: 2009/05/22(Fri) 10:45
投稿者にっく
お世話になっております
にっくです

環境:VB2005

一列に繋がったデータ(↓)をSplitで一個づつ配列に
保存して、これを200個ごとに改行して表示させる方法を
教わったのですが、

1
2
3
4



10000

dim L(), L1(), M(199), N(500), as string
L1 = Split(L, vbCrLf)
For i as integer = 0 to 500
    Array.Copy(L1, i*200,M, 0, 199)
    N(i) = Join(M, vbCrLf)
next
Textbox1.text = Join(N, vbCrLf)

今度はこれをA(任意数,199) の2次元配列に入れていきたいのですが,
Splitで分けた1個づつを1列200づつ入れたいのです。
これができるとA(1,i)とかにしてFor nextで列単位で値の操作ができる
というのが夢です。。。

ご教授の程、宜しくお願いします。

[ツリー表示へ]
タイトルRe: 配列の格納
記事No8995
投稿日: 2009/05/22(Fri) 14:36
投稿者へつ

> For i as integer = 0 to 500
>     Array.Copy(L1, i*200,M, 0, 199)
>     N(i) = Join(M, vbCrLf)
> next

を、もう一つForで囲めばいいだけでは?

[ツリー表示へ]
タイトルRe^2: 配列の格納
記事No8996
投稿日: 2009/05/22(Fri) 15:53
投稿者にっく
> を、もう一つForで囲めばいいだけでは?
囲んで2次元配列に入れようとしたのですが、、、

Dim L1, L2(500,199) As string, M(199) As string

For R as integer = 0 To 500
For i as integer = 0 To 500
     Array.Copy(L1, i*199, M, 0, 199)
     L2(R,i) = Join(M, vbCrLf)
next
next
Textbox1.text = L2(0,0)
"""" 結果
1
2
3
・・・
199

エラーで止まってしまい、(インデックスが配列の境界外)
止めてL2(0,0)に入っているものを確認すると、
Mのデータが199個分入っていました。
2次元に分離するにはどうしたら良いでしょうか。。。

 

[ツリー表示へ]
タイトルRe^3: 配列の格納
記事No8998
投稿日: 2009/05/22(Fri) 18:27
投稿者魔界の仮面弁士
実際のコードを提示してください。今のままでは答えようがありません。


> Dim L1, L2(500,199) As string, M(199) As string
この場合、L1 は 配列ではありません。String 型になってしまいますよね。

そのため、
>      Array.Copy(L1, i*199, M, 0, 199)
は、そもそもコンパイルエラーになってしまい、
> エラーで止まってしまい、(インデックスが配列の境界外)
という実行エラーが発生する事は無いはずです。

[ツリー表示へ]
タイトルRe: 配列の格納
記事No8997
投稿日: 2009/05/22(Fri) 18:22
投稿者魔界の仮面弁士
> これができるとA(1,i)とかにしてFor nextで列単位で値の操作ができる
> というのが夢です。。。

であれば、A(i) → A(x, y) の 2 次元配列に再加工せずとも、
A(x * 200 + y) で操作すれば、目的は果たせるかと思います。

 For i As Integer = 0 To 199
  A(  0 + i) = "a"   'A(0, i) = "a" に相当
  A(200 + i) = "b"   'A(1, i) = "b" に相当
  A(400 + i) = "c"   'A(2, i) = "c" に相当
  A(600 + i) = "d"   'A(3, i) = "d" に相当
 Next


逆に、A(x, y) に相当する A(i) を求めるのであれば、こうかな。
 x = i \ 200
 y = i Mod 200

[ツリー表示へ]