質問編集履歴

1 a

inukujira

inukujira score 109

2015/07/14 14:49  投稿

[VB] DataTableによる平均値の算出
以下のテキストファイルがあります。
[test.txt]
```lang-ここに言語を入力
2015/07/13 00:00:00, 1
2015/07/13 00:00:01, 2
2015/07/13 00:00:02, 3
2015/07/13 00:01:00, 1
2015/07/13 00:01:01, 2
2015/07/13 00:01:02, 3
…(省略:実際には24時間分の1秒毎データがあります。)
```
これを次のように、DataTableへセットしました。
```lang-ここに言語を入力
no,date,value
0,2015/07/13 00:00:00,1
1,2015/07/13 00:00:01,2
2,2015/07/13 00:00:02,3
3,2015/07/13 00:01:00,1
4,2015/07/13 00:01:01,2
5,2015/07/13 00:01:02,3
…(省略)
```
行いたい事はdata"2015/07/13 00:00"の"value"平均値を算出したいです。
(要は1秒間隔で出力された値を1分間隔毎に平均値を取得したい)
DataTableに入れる事までは出来ました。
```lang-ここに言語を入力
Dim MyDB As New DataTable
Dim no As Integer = 0
With MyDB
   .PrimaryKey = New DataColumn() {.Columns.Add("no", Type.GetType("System.Int32"))}
   .Columns.Add("date", Type.GetType("System.DateTime"))
   .Columns.Add("value", Type.GetType("System.Int32"))
End With
With New StreamReader("test.txt", System.Text.Encoding.Default)
   While .Peek() > -1
       Dim value() As String = .ReadLine.Split(","c)
       dtRow = mydb.NewRow()
       dtRow("no") = no
       dtRow("date") = value.ToArray(0)
       dtRow("value") = value.ToArray(1)
       mydb.Rows.Add(dtRow)
       no = no + 1
   End While
End With
```
ちなみに、以下の処理だとめっちゃくちゃ時間がかかって話になりませんでした、、、
```lang-ここに言語を入力
Dim TitleDate As String
TitleDate = MyDB.Select("no=0").ToArray(0).Item("date")
For i = 0 To 1440
   dtRow = ds.Tables(0).NewRow
   dtRow(0) = DateTime.Parse(TitleDate & " 00:00").AddMinutes(i).ToString("yyyy/MM/dd HH:mm")
   dtRow(1) = MyDB.Compute("Avg(value)", "Convert(date, 'System.String') LIKE '" & dtRow(0).ToString & "%'")
   ds.Tables(0).Rows.Add(dtRow)
Next
```
すばやく1分毎の平均値を取得するにはどのように行えば良いでしょうか?
よろしくご教示下さい。
DataTableよりも高速な方法があれば、そちらも教えて頂きたいです。
よろしくご教示下さい。
  • VB.NET

    1667 questions

    Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る