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

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

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

Re[3]: 日時をユニークにしたバッファの作成


(過去ログ 123 を表示中)

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

■73316 / inTopicNo.1)  日時をユニークにしたバッファの作成
  
□投稿者/ もえ (1回)-(2014/09/11(Thu) 10:02:52)

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

VB6は少々かじっておりますが、.net VB(2010使用)は初心者です。
どうぞよろしくお願い致します。
質問内容に関してご回答はいろいろあると思いますが、初心者でも分かるような方法をご紹介して頂けるとありがたいです。


現在、各部屋の温度を計測しています。
各部屋の温度が、CSVファイルに落とされサーバに転送されます。

日時,温度

A実験実(A.csv)
2014/09/01 10:05:00,23.2 <−
2014/09/02 16:33:10,21.6
2014/09/10 10:05:00,20.8


B実験室(B.csv)
2014/09/01 10:05:00,18.7 <−
2014/09/03 12:01:00,17.0
2014/09/04 09:05:00,18.8


C実験室(C.csv)
2014/09/1 10:05:00,21.4 <−


これらのデータを、全て読み込み他のシステムへ渡すためのフォーマットに変更します。
この部分が、今回の質問です。

<条件>
1.現在、A、B、Cと3つのCSVファイルがありますが、これを1つにまとめます。
2.現在の観測点は3部屋のみですが、今後部屋数は増えます。部屋数は可変です。


<データのまとめ方>
次のようにデータをまとめます。
日時,A実験室温度,B実験室温度,C実験室温度

2014/09/01 10:05:00,23.2,18.7,21.4(A、B、C全てのデータあり)
2014/09/02 16:33:10,21.6,,(Aのデータのみあり)
2014/09/03 12:01:00,,17.0,(Bのデータのみあり)
2014/09/04 09:05:00,,18.8,(Bのデータのみあり)
2014/09/10 10:05:00,20.8,,(Aのデータのみあり)


日時の部分をユニークにし、データ設定部分が可変のバッファを作りたいのですが、何を使用するのがよいのでしょうか?
ユニークということでHashTableを試してみましたが、社員NO.と社員名のように2つのデータが無いとできないようですし。

何を使うのがベストであるか、サンプルなど紹介されているサイト等教えて頂けると助かります。

どうぞよろしくお願い致します。
引用返信 編集キー/
■73318 / inTopicNo.2)  Re[1]: 日時をユニークにしたバッファの作成
□投稿者/ 魔界の仮面弁士 (117回)-(2014/09/11(Thu) 10:53:28)
No73316 (もえ さん) に返信
> 日時の部分をユニークにし、データ設定部分が可変のバッファを作りたいのですが、何を使用するのがよいのでしょうか?
> ユニークということでHashTableを試してみましたが、社員NO.と社員名のように2つのデータが無いとできないようですし。

2005 以降なので、Dictionary が良いかな。あるいは DataSet とか。


> 2014/09/01 10:05:00,23.2 <−
> 2014/09/01 10:05:00,18.7 <−
> 2014/09/1 10:05:00,21.4 <−

なぜ、実験室C のみ、日付書式が異なるのでしょうか?


とりあえず、同じ書式という前提で、Dictionary を用いて書くとこんな感じです。
変数名はあえて日本語にしています。


日付書式が異なる場合は、String 型のまま処理するのではなく、
「Date.TryParseExact メソッド」で日付型に揃えてから、
それをキーとするのが良いでしょう。


Imports System.IO
Imports System.Text
Public Class Form1
  Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    '部屋数が増えた場合は、この変数を調整する
    Dim 部屋リスト() As String = {"A", "B", "C"}

    '各部屋の CSV を順次読み込んで、「集計結果」変数に蓄える
    Dim ファイル数 As Integer = 部屋リスト.Length
    Dim 集計結果 As New Dictionary(Of String, String())
    For n = 1 To ファイル数
      Dim CSVパス = Path.Combine("C:\test1", 部屋リスト(n - 1) & ".CSV")
      For Each 列 In File.ReadLines(CSVパス, Encoding.ASCII).Select(Function(行) 行.Split(","c))
        Dim 日時 = 列(0)
        Dim 室温 = 列(1)
        Dim 集計行() As String '←ファイル数3なら4列
        If 集計結果.ContainsKey(日時) Then
          集計行 = 集計結果(日時) '既存行の取得
        Else
          集計行 = New String(ファイル数) {}
          集計行(0) = 日時 '0列目には日時を格納
          集計結果.Add(日時, 集計行)
        End If
        集計行(n) = 室温 'n列目に、その部屋の温度を格納
      Next
    Next

    '集計結果を、日付順に並べて別ファイルに出力
    Dim 最終結果 = From 行 In 集計結果 Order By 行.Key Select String.Join(",", 行.Value)

    File.WriteAllLines("C:\test1\最終結果.csv", 最終結果, Encoding.ASCII)
  End Sub
End Class
引用返信 編集キー/
■73321 / inTopicNo.3)  Re[2]: 日時をユニークにしたバッファの作成
□投稿者/ もえ (2回)-(2014/09/11(Thu) 14:18:05)
魔界の仮面弁士 さん

ご回答ありがとうございます。

> なぜ、実験室C のみ、日付書式が異なるのでしょうか?

申し訳ありません。
間違いです。
フォーマットは、全て一緒です。

コードの内容はクリアです。
Directoryは、もう少し調べてみます。

実際にコーディングをして疑問点など出ましたら、またよろしくお願い致します。

どうもありがとうございます。 <(__)>
解決済み
引用返信 編集キー/
■73322 / inTopicNo.4)  Re[3]: 日時をユニークにしたバッファの作成
□投稿者/ 魔界の仮面弁士 (119回)-(2014/09/11(Thu) 14:49:30)
No73321 (もえ さん) に返信
> Directoryは、もう少し調べてみます。
ディレクトリですか? ← System.IO.Directory クラス?
ディクショナリ ではなく? ← System.Collections.Generic.Dictionary(Of TKey, TValue) クラス


なお今回のコードは、Hashtable でも同じことができます。
Dictionary の方が扱いは楽ですが。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -