C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: カンマ形式データを配列に


(過去ログ 117 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■68851 / inTopicNo.1)  カンマ形式データを配列に
  
□投稿者/ coscos (3回)-(2013/11/22(Fri) 17:03:26)

分類:[VB.NET/VB2005 以降] 

すみません、いつもお世話になります。
menu_dの変数に入っている、カンマデータをstrArrに取り込んでいます。
これで一応動作していますが、お聞きしたいのは、
For i = 0 To max_re - 1
For j = 0 To max_col
Debug.Print(strArr(i)(j))
Next
Next
の部分ですが、こんな事をしなくても、簡単にFor Eachとかを
使って出来るのではないかと思いますが、わかりませんので、
宜しくお願い致します。

Module Module1
Function menu_show()
Dim textLines As New List(Of String())
Dim max_re As Integer '最大レコード
Dim max_col As Integer '最大カラム
Dim stBuffer As String
Dim menu_d As String
menu_d = "data1,t1,t11" & vbCrLf & _
"data2,t2,t21" & vbCrLf & _
"data3,t3,t31"
Dim rs As New System.IO.StringReader(menu_d)
While rs.Peek() > -1 'ストリームの末端まで繰り返す
Dim cols() As String ' 読み込んだものを追加で格納する
stBuffer = rs.ReadLine() '一行読み込
cols = Split(stBuffer, ",")
If UBound(cols) > max_col Then '最大カラム
max_col = UBound(cols)
End If
textLines.Add(cols)
max_re += 1 '最大レコード
End While
Dim strArr()() As String
strArr = textLines.ToArray
Dim i As Integer
Dim j As Integer
For i = 0 To max_re - 1
For j = 0 To max_col
Debug.Print(strArr(i)(j))
Next
Next
Return strArr
rs.Close()
End Function
End Module
引用返信 編集キー/
■68862 / inTopicNo.2)  Re[1]: カンマ形式データを配列に
□投稿者/ Jitta (97回)-(2013/11/22(Fri) 22:30:32)
Jitta さんの Web サイト
No68851 (coscos さん) に返信
> すみません、いつもお世話になります。
> menu_dの変数に入っている、カンマデータをstrArrに取り込んでいます。
> これで一応動作していますが、お聞きしたいのは、
> For i = 0 To max_re - 1
> For j = 0 To max_col
> Debug.Print(strArr(i)(j))
> Next
> Next
> の部分ですが、こんな事をしなくても、簡単にFor Eachとかを
> 使って出来るのではないかと思いますが、わかりませんので、
> 宜しくお願い致します。

「簡単」というのは、どういうことを望んでいらっしゃるのでしょうか。

たとえば、…VB の文法がわからないので C# で書きますが、

foreach (var strArr1 in strArr)
  foreach (var strArr2 in strArr1)
   Debug.Write(strArr2);

のようにできます。「var」は、「dim strArr1」と、As を書かなければ良かったような?

あるいは、コレクションを使えば、max_re など、要素数をカウントする必要もなくなります。
引用返信 編集キー/
■68863 / inTopicNo.3)  Re[2]: カンマ形式データを配列に
□投稿者/ coscos (4回)-(2013/11/22(Fri) 23:48:51)
No68862 (Jitta さん) に返信
ご回答有り難う御座いました。
せっかくご回答頂きましたが、こちらに読み解く力がありませんで。
もっと調べてみましたら、以下の様になりました。
For Nextは外せませんでしたが、
GetLengthが使えそうである事がわかりました。
有り難う御座いました。

Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim strArr()() As String
strArr = menu_show()
Dim i As Integer
Dim j As Integer
For i = 0 To strArr.Length - 1 'レコードサイズ
For j = 0 To strArr(0).GetLength(0) - 1 'カラムサイズ
Debug.Print(strArr(i)(j))
Next
Next
End Sub
End Class

Module Module1
Function menu_show()
Dim textLines As New List(Of String())
Dim stBuffer As String
Dim menu_d As String
menu_d = "data1,t1,t11" & vbCrLf & _
"data2,t2,t21" & vbCrLf & _
"data3,t3,t31"
Dim rs As New System.IO.StringReader(menu_d)
While rs.Peek() > -1 'ストリームの末端まで繰り返す
Dim cols() As String ' 読み込んだものを追加で格納する
stBuffer = rs.ReadLine() '一行読み込み
cols = Split(stBuffer, ",")
textLines.Add(cols)
End While
Dim strArr()() As String
strArr = textLines.ToArray
Return strArr
rs.Close()
End Function
End Module

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -