|
分類:[VB.NET/VB2005 以降]
お世話になります。
すみません、先ほど同じような題名で質問した者ですが、
VB2008にて、指定したcsvファイルをDataGridViewに出力するというプログラムを作成しているのですが、
社員の一ヶ月の勤務データをcsvに書き込み、そのデータをボタンを押下したタイミングでDataGridView
に出力するという仕様にしたいと考えております。
以下がソースになります。
Private Sub CSV_Read() Handles CSVRegister.Click
Dim Items() As String 'CSVの各項目を表す配列
Dim Times() As String '時間編集用の配列
Dim i As Integer = 0
Dim path As String
Dim num As Integer = 0
Dim Reader As New IO.StreamReader(path, System.Text.Encoding.GetEncoding("Shift-JIS"))
Dim Line As String = Reader.ReadLine 'CSVの一行
Do Until IsNothing(Line)
If num >= 1 Then
Items = Line.Split(",") '一行を, (カンマ)で区切って項目ごとに分解
For n = 0 To Items.Length - 1
If Items(n).Replace("""", "") = Nothing Then
Items(n) = "0"
End If
Next n
'セルに値を設定する。
'開始時間
Me.DataGridView1.Rows(i).Cells(2).Value = Times(0) + (Times(1) / 60)
'終了時間
Me.DataGridView1.Rows(i).Cells(3).Value = Times(0) + (Times(1) / 60)
'外出時間
Me.DataGridView1.Rows(i).Cells(4).Value = Times(0) + (Times(1) / 60)
i = i + 1
End If
num = num + 1
Line = Reader.ReadLine '次の行を読み込む。
Loop
Reader.Close()
End Sub
以上がソースです。
ここで質問なのですが、一ヶ月分なので、csvのデータは、30日分ほどあります。
そこで、実行すると
15日までは出来るのですが、16日の時点で、
「インデックスが配列の境界外です。」というエラーが出てしまいます。
一応、このエラーについても調べては見たのですが、
理解することが出来ませんでした・・・。
それと分からないのが、なぜ、15日までしか取得できないのでしょうか・・・
Items = Line.Split(",") '一行を, (カンマ)で区切って項目ごとに分解
For n = 0 To Items.Length - 1
If Items(n).Replace("""", "") = Nothing Then
Items(n) = "0"
End If
Next n
という部分で、Items(n)の変数に、csvのデータを格納しています。
csvのデータには、30行のデータが存在するのですが、格納できているのは、
その半分だけなんです。
大変失礼なのですが、どなたか、csvのデータをすべて(30行まで)取得する方法を
ご教授願えないのでしょうか。
連続で同じような質問をしてしまい、申し訳ないのですが、よろしくお願いいたします。
|